V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  程序员

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

  •  
  •   JasonLaw · 2020-12-01 22:22:28 +08:00 · 1642 次点击
    这是一个创建于 1442 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    谢谢大家的回复,有点思路了。
    JasonLaw
        11
    JasonLaw  
    OP
       2020-12-02 13:14:37 +08:00
    @xcstream #6 实际项目遇到的问题,但是这个不重要呀。
    jones2000
        12
    jones2000  
       2020-12-02 14:34:56 +08:00
    数据建索引, 索引数据单独存, 其他数据可以分开存到不同的服务器上,查询先查索引数据, 通过索引读取对应服务器上的数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.