【发布时间】:2015-01-29 09:08:46
【问题描述】:
在数据存储的设计过程中,我们正在寻找一种对条目进行分区的方法。主要瓶颈是在对共享计数器进行分区时。可以说,我们有 n 票要提供(典型的火车预订,IRCTC 等)。我们如何对数据存储进行分区,以便客户端看到它们之间的实时一致性(根据预订百分比,即当前值/x)。
每次读取的聚合成本太高,任何其他指针都会有用。
同时假设写入操作具有并发性(因此不会将读取卸载到从属设备),并且对于最终的一致性来说是可以的。 但是有没有办法可以最小化分片之间的不一致性差异。例如,100 张票的部分是像 25、25、25、25 一样跨 4 个分片完成的。 在任何给定时间点,数据库的视图都应该像 x% 一样满,以及如何最大限度地减少分片之间的不一致(如循环、散列等幼稚操作)。
【问题讨论】:
-
共享计数器,根据定义,不能被分区。极端和最简单的解决方案是为该计数器使用单独的实例(该计数器需要多少吞吐量?)。其他方法具有不同程度的一致性和准确性,视需要而定。例如,您可以使用每个分区的 HyperLogLog 并在读取时非常有效地合并它们。
-
在某些情况下,单个实例可能还不够,在某些时候我们可能需要分区!此外,提供概率数字可能对应用程序不利(在预订门票的情况下)。
标签: database database-design redis sharding horizontal-scaling