2014-10-03 64 views
0

存储可搜索的JSON我有一个如下表:在MySQL

{"transferId":100010003, 
"timestamp":1401778800000, 
"amount":1150, 
"customerTimestamp":1401778800000, 
"customerFullName":"John cusack", 
"customerMsisdn":460100000003, 
"customerMessage":"Test payment3", 
"assignee":Bob, 
"comments":this is a comment, 
"currency":"SEK", 
"balanced":false, 
"inboxNotificationId":0} 

上面JSON是搜索:

id | notification_id | user_id | metadata | created_at | modified_at 
-------------------------------------------------------------------- 
    |     |   |   |   |   

元数据包含JSON对象如字段。这意味着可能有一个交易元数据的请求,其中customerName = john cusack和user_id = 1234.

我完全理解这是一个非常糟糕的设计。切勿将RDBMS中的json对象存储,如果它易于更改或将被搜索。

我想优化模式,以便在查询数据时,不需要很多时间就可以返回结果(目前需要很长时间)。为此,我能想到的三个选项:

  • 解体JSON对象并存储领域中单独列 指数它们。
  • 使用的NoSql DB喜欢的MongoDB用于存储JSON
  • 使用Solr的

哪一个是最合乎逻辑的和有益的?他们全部?可能有人请特别强调solr(因为我不知道它是如何工作的),关于为什么我应该或不应该使用它?

干杯!

+0

考虑在存储之前对其进行解码,并将其分别存储在规范化的环境中。 – Strawberry 2014-10-03 12:58:56

+0

你是说我做的第一点? (分解json对象并将字段存储在单独的列中并将它们编入索引。) – samach 2014-10-03 14:06:32

+1

是的。究竟! (但我有偏见) – Strawberry 2014-10-03 14:15:42

回答

0

你一定要把JSON放到单个字段中。你有不同的类型(字符串,布尔值,数字等),你希望它们分开处理。然后你可以决定你做什么,但是你肯定可以使用Solr来做这种事情。