数据规模在 10 亿条,表如何设计,什么合适的方案

2018-02-16 20:29:07 +08:00
 thomaswang

比如: 电影资源有 10 亿级别,电影标签有 1000 个( eg:武侠,言情,剧情,悬疑, 90 年代...), 每个电影有不确定个标签

用户检索的时候,可能会点选不确定个标签,这样的场景在实际生产中如何处理

5673 次点击
所在节点    问与答
34 条回复
alcarl
2018-02-16 22:18:49 +08:00
@nandaye 同时查数个标签就慢了,况且这种需求标签应该也是会增加的
alcarl
2018-02-16 22:19:42 +08:00
@feverzsj 单表 10 亿是可以,但这个表还有一千列。。。。。
bzzhou
2018-02-16 22:21:45 +08:00
如果仅仅是满足各种标签的组合的检索,而不考虑 ranking 的情况
那么直接利用 bitmap 倒排拉链即可

10 亿电影,每个电影从 0 自增分配 id ;然后每个标签,用一个包含 10 亿个 bit 的 bitmap 来表示是否包含某部电影。

每个标签的存储开支:1,000,000,000bit,大概 120M 的存储空间
那么 1000 个标签,理论上需要 120G 的存储空间

至于检索的性能,如果数据可以全部落入到内存中,那么几个标签的过滤,基本都是 10ms 级别

如果要落入磁盘,那么多准备几块 SSD 也可以

PS:估计 ES 在这个场景下,哪怕单节点,性能也不会差(前提是关闭 ranking )
lance6716276
2018-02-16 22:31:35 +08:00
一年前 tidb 的学长给过我们一个某软件的 alpha 版,已经记不清了,做复杂运算测试的时候千万行还是秒级,估计现在 tidb 也可以了吧
kltt22
2018-02-16 22:48:39 +08:00
@wqzjk393 你忘了建索引吧,千万数据跑起来还是挺流畅的。
feverzsj
2018-02-16 22:48:55 +08:00
@alcarl tag 系统设计可以参考 danbooru 这些图站的
nandaye
2018-02-16 22:49:34 +08:00
@alcarl 传统数据库比你想的可能还是强不少的,where 条件多个没问题的,电影标签的分类没多少可分的
cnbattle
2018-02-16 22:52:56 +08:00
@thomaswang 一般这个得具体自身实际业务场景设计,不管数据库还是代码都得量身设计,V 友们要么根据你举得例子的理解说说,要么就是一个同通用的想法,别想着有怎样一个完整通用的方法,还是得根据具体自身实际业务场景来
ebony0319
2018-02-16 23:31:34 +08:00
@terranboy 我相信不是所有的电影都有便签的。
wellsc
2018-02-17 02:25:41 +08:00
@bzzhou 编程珠玑第一章。。
Daming
2018-02-17 08:24:01 +08:00
做好分区+索引
ycz0926
2018-02-17 14:52:20 +08:00
@thomaswang 倒让我想起了一次面试,面我的人问的也是一个类似的问题,我回答说,分库、分表、缓存、再不然上集群……
可最后,他说我得考虑业务方面
这种问题,似乎不如问算法、cs 领域的理论来的贴切,这种问题不管你怎么答,都是每个准的,这个收敛的结果,只把握在问你的人手里
ycz0926
2018-02-17 14:53:53 +08:00
还有一个就是,看面的岗位吧,你说要是一个 php 的 dev,问这种问题,是去做 TL、做架构么?还是让我兼职 DBA 呢 。。。😅
cjyang1128
2018-02-17 17:14:00 +08:00
列一下方案:
1、自己做分库分表
2、分布式数据库:Tidb 或者阿里云的某些产品比如 DRDS 或者 Petadata ;或者也可以调研一下 Greenplum,分布式的 pgsql
3、搜索引擎:Solr 或者 ES
4、NoSQL 类型比如 HBase

1、2 数据可以平滑迁移,但是 3、4 需要较多的重构。我感觉你这个场景 HBase 应该可以完美 hold。如果公司没有 HBase 运维经验的话,可以考虑采购 HBase 的云产品。

另外比较好奇的是,如果你这个是按标签的搜索场景的话,你们目前通过一张 tag_id_to_movie_id 这张关系表来 select 吗?

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

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

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

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

© 2021 V2EX