
我手头上有大约几十万条数据,数据的类型大概是这样子的: 第一条: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 NoSQL 都可以,不愁 License 的话就 Mongo,愁的话就 Cassandra 。 ElasticSearch 也可以,而且性能不错。 |
7 AX5N 2020-12-02 16:53:47 +08:00 同问,比如你要做一个电影 STAFF 的数据库,有的电影有 A 职位,有的电影没有,你们会怎么做? |
8 F281M6Dh8DXpD1g2 2020-12-02 17:07:27 +08:00 via iPhone @AX5N movie postion name 不就行了 |
9 newghost 2020-12-02 17:24:24 +08:00 |
10 dusu 2020-12-02 22:39:58 +08:00 via iPhone @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 属性都可以应对 优点是维护起来容易 拓展方便 缺点就是多了次额外查询 |