数据库设计/选型和权限问题

2020-12-02 15:01:36 +08:00
 anthoy
我手头上有大约几十万条数据,数据的类型大概是这样子的:
第一条: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 数据库存储
不知道大家能否给一点建议
1559 次点击
所在节点    数据库
11 条回复
kuro1
2020-12-02 15:03:02 +08:00
mongo 即可
securityCoding
2020-12-02 15:20:59 +08:00
mongo 用 mysql 搞来搞去代码慢慢会变得复杂无比最后成了一个四不像
anthoy
2020-12-02 15:35:11 +08:00
其实我是想了解下除了这种方式外是否还有其他可行的方案,类如设计思路换一下?有其他的查询方式?
dusu
2020-12-02 15:58:10 +08:00
base 表

id-meta_info

base_attr 表

id-base_id-attr-val



把数据拆成行,attr-base_id 加上你的索引 轻松解决
anthoy
2020-12-02 16:12:29 +08:00
@dusu 不太明白,能否再说一下,没有接触过这种
Mithril
2020-12-02 16:38:44 +08:00
NoSQL 都可以,不愁 License 的话就 Mongo,愁的话就 Cassandra 。
ElasticSearch 也可以,而且性能不错。
AX5N
2020-12-02 16:53:47 +08:00
同问,比如你要做一个电影 STAFF 的数据库,有的电影有 A 职位,有的电影没有,你们会怎么做?
liprais
2020-12-02 17:07:27 +08:00
@AX5N movie postion name 不就行了
newghost
2020-12-02 17:24:24 +08:00
dusu
2020-12-02 22:39:58 +08:00
@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 属性都可以应对

优点是维护起来容易 拓展方便

缺点就是多了次额外查询
Mithril
2020-12-03 08:44:06 +08:00
@newghost 首页介绍就把自己名字写错了可还行。。。还弄个大红的底,可怕别人不知道了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731386

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX