【发布时间】:2014-10-03 11:21:08
【问题描述】:
我有一张下表:
id | notification_id | user_id | metadata | created_at | modified_at
--------------------------------------------------------------------
| | | | |
字段元数据包含一个json对象,例如:
{"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是可搜索的。这意味着可能存在对 customerName = john cusack 和 user_id = 1234 的交易元数据的请求。
我完全理解这是一个非常糟糕的设计。永远不要在 RDBMS 中存储一个 json 对象,如果它容易改变或者会被搜索。
我想优化架构,这样当我查询数据时,返回结果不会花费很多时间(目前需要很多时间)。为此,我可以想到三个选项:
- 分解 json 对象并将字段存储在单独的列中,然后 索引它们。
- 使用像 MongoDB 这样的 NoSql DB 来存储 json
- 使用 solr
哪一个是最合乎逻辑和最有益的?他们都是?有人可以特别强调一下 solr(因为我不知道它是如何工作的),关于我为什么应该或不应该使用它?
干杯!!
【问题讨论】:
-
考虑在存储之前对其进行解码,并在规范化环境中单独存储。
-
你是说我说的第一点? (分解 json 对象并将字段存储在单独的列中并对其进行索引。)
-
是的。确切地! (但我有偏见)