我手头上有大约几十万条数据,数据的类型大概是这样子的:
第一条:a:xxx,b:xxx,c:xxx
第二条:b:xxx,d:xxx
第三条:a:xxx,b:xxx,d:xxx
...
主要意思是数据的每条里面的参数都不一样,有的数据可能在别条里面有,有的没有
而且 a/b/c/d 目前是没有固定下来的,可能存在递增下去 e,f,g...这样子
数据的使用是:
1.获取数据所有条里面的 a
2.获取数据所有条里面的 a 和 b,a 和 b 同时存在
目前我是使用 mysql 的 json 进行存储的,然后通过查询是判断是否存在 a 或者是否同时存在 a/b,存在则进行提取 a 或者 a/b 出来
目前打算更换一下数据库的设计或者切换为 mongodb 数据库存储
不知道大家能否给一点建议
1
kuro1 2020-12-02 15:03:02 +08:00
mongo 即可
|
2
securityCoding 2020-12-02 15:20:59 +08:00
mongo 用 mysql 搞来搞去代码慢慢会变得复杂无比最后成了一个四不像
|
3
anthoy OP 其实我是想了解下除了这种方式外是否还有其他可行的方案,类如设计思路换一下?有其他的查询方式?
|
4
dusu 2020-12-02 15:58:10 +08:00 via iPhone
base 表
id-meta_info base_attr 表 id-base_id-attr-val 把数据拆成行,attr-base_id 加上你的索引 轻松解决 |
6
Mithril 2020-12-02 16:38:44 +08:00 1
NoSQL 都可以,不愁 License 的话就 Mongo,愁的话就 Cassandra 。
ElasticSearch 也可以,而且性能不错。 |
7
AX5N 2020-12-02 16:53:47 +08:00
同问,比如你要做一个电影 STAFF 的数据库,有的电影有 A 职位,有的电影没有,你们会怎么做?
|
9
newghost 2020-12-02 17:24:24 +08:00
|
10
dusu 2020-12-02 22:39:58 +08:00 via iPhone 1
@anthoy
base 表 存公用 meta 信息 也就是你的所谓第一行 第二行 base_attr 表 每一行,代表 base_id=base 表 id attr=属性名称或代号 val=属性对应的值 base_id+单个属性+单个值,例如: 第一行 id + 这是 a 属性 + a 的内容 第一行 id + 这是 b 属性 + b 的内容 第二行 id + 这是 a 属性 + a 的内容 第三行 id + 这是 c 属性 + c 的内容 .... 后续无论是要加 x 还是 y 还是 z 属性都可以应对 优点是维护起来容易 拓展方便 缺点就是多了次额外查询 |