【发布时间】:2019-04-01 22:14:21
【问题描述】:
从系统设计/可扩展性的角度来看,在处理需要大量写入数据库中特定表的系统时,有哪些行业标准策略。
为简单起见,假设该表是产品的库存表,并具有“产品名称”列和“计数”列,每次购买新产品时它都会简单地增加 +1系统。每隔 2 次就有数百万用户购买不同的产品,我们必须跟踪每种产品的最新计数,但这不一定是严格实时的,也许 5 分钟的延迟是可以接受的。
我的选择是:
1) 主从复制,其中主数据库处理所有写入,从属处理读取。但这并不能解决写繁重的问题
2) 根据产品名称范围或其散列值对数据库进行分片。但是,如果某个特定产品(例如 Apple)在短时间内收到大量更新,它仍然会命中同一个数据库。
3) 批量更新?使用某种缓存并每隔 X 秒写入表,并累积我们在这 X 秒内收到的任何内容?这是一个有效的选择,我使用什么缓存机制?如果上次读取和下次写入之间发生崩溃怎么办?如何恢复丢失的计数?
4) 还有其他我忘记的明显选择吗?
感谢任何见解!
【问题讨论】:
-
您是否受限于特定的数据库?众所周知,Cassandra 具有高写入吞吐量,并且按设计分布以实现可扩展性/高可用性
-
我对允许高写入吞吐量的技术和原理更感兴趣,而不是在哪个框架或数据库上。
标签: architecture scalability system-design