多服务实例如何平摊巨大的数据集

2020-12-01 22:22:28 +08:00
 JasonLaw

假设我有一个数据集,刚开始这个数据集可能很小,但是最终会变得很大,例如{e1, e2, e3, ..., e1,000,000}。这个数据集中的元素可以被删除,新的元素也可以被加入到集合。

请问如何平摊数据集到多个服务实例呢?如何应对“元素被删除”和“添加新元素”等情况?

当然,服务实例的数量也是可变的,它会因为数据集的变化而变化。服务实例的数量变化时,应该怎么重新分布呢?

1651 次点击
所在节点    程序员
12 条回复
zooo
2020-12-01 22:23:40 +08:00
hadoop?
liprais
2020-12-01 22:25:00 +08:00
看你是要 share disk 还是 share nothing 了
DoctorCat
2020-12-02 00:27:43 +08:00
集群分区做 sharding,需要一个协调者来进行健康检查和读写请求路由;
重新分布涉及到数据迁移了,最好还是做冗余,例如 HDFS 那样。坏了的节点摘掉替换就好,然后再复制一份数据给新节点。
user8341
2020-12-02 00:36:53 +08:00
这题是要考察一致性哈希吧?
DoctorCat
2020-12-02 00:39:54 +08:00
对于重新分布,可以参考一致性 hash 和 Range based 策略
xcstream
2020-12-02 03:18:21 +08:00
这是个考试题 还是个实际项目
yzbythesea
2020-12-02 03:36:09 +08:00
Sharding & Circular Hashing
xuanbg
2020-12-02 08:59:35 +08:00
每个服务服务于固定大小的数据集就行了,譬如设定每个服务 10 万数据,那么数据量增加到 9 万的时候就启动第二台服务器,从第 100001 个数据开始就是第二台服务器的事情了。以此类推
xuanbg
2020-12-02 09:02:21 +08:00
至于删除后的空余位置,不多的话就空着好了。太多的话,可以参考磁盘文件系统的做法,给数据建立索引,然后就可以用空位填充新数据了。
JasonLaw
2020-12-02 13:13:59 +08:00
@zooo #1
@liprais #2
@DoctorCat #3
@user8341 #4
@yzbythesea #7
@xuanbg #8

谢谢大家的回复,有点思路了。
JasonLaw
2020-12-02 13:14:37 +08:00
@xcstream #6 实际项目遇到的问题,但是这个不重要呀。
jones2000
2020-12-02 14:34:56 +08:00
数据建索引, 索引数据单独存, 其他数据可以分开存到不同的服务器上,查询先查索引数据, 通过索引读取对应服务器上的数据。

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

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

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

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

© 2021 V2EX