对共享计数器的数据库进行分区



在设计数据存储的过程中,我们正在寻找一种对条目进行分区的方法。主要瓶颈是在对共享计数器进行分区时。比方说,我们提供n张票(典型的火车预订,IRCTC等)。我们如何对数据存储进行分区,以便客户端看到它们之间的实时一致性(就预订百分比而言,即当前值/x)。

每次读取的聚合成本太高,任何其他指针都很有用。

此外,写入操作也假定并发性(因此不会将读取加载到从属服务器),并且对于最终一致性是可以的。但是,有没有办法将分片之间的不一致差异最小化。例如,100 张票证的分割就像 25、25、25、25 跨 4 个分片一样。在任何给定的时间点,数据库的视图都应该像x%已满,以及如何最小化分片之间的不一致(轮询,哈希等朴素操作

)。

如果您的使用案例想要分发共享计数器以更好地处理读取操作的负载,您可以将共享计数器保留在其自己的实例中(根据 @ItamarHaber 的建议)并建立从主实例复制的 N 个从属实例。 然后,针对该共享计数器的读取操作可以在 N 个从站之间进行负载平衡。 这里有一些关于通过配置文件操纵主从设置的讨论,以及关于使用 SLAVEOF 命令动态操作从设置的文档。

这里需要注意的是,你必须接受仅针对主节点的写入操作(INCRDECR等),也许是通过基于队列的实现。 这种方法将允许分发读取操作,但我不知道有什么方法可以避免针对公共资源序列化写入,除非您愿意允许最终一致性。

最新更新