分布式缓存
Hazelcast是一种分布式缓存实现,是 Oracle Coherence 的免费开源替代方案,它还支持 Write-behind 和 Continuous Query 机制,结合起来可以解决您的三个问题。
- 使用 write-behind 通过缓存进行异步数据库写入。
- 使用连续查询来接收每个缓存放置操作的实时更新。
- Hazelcast 是分布式的,启动集群非常容易。使用 write-behind,您的可扩展性受到 hazelcast 节点数量和可用内存量的限制。
消息传递
消息中间件是另一种可用于解决您的问题的选项。
- 利用异步队列/主题来卸载数据库。队列/主题将以灵活的方式进行逻辑分区,以便能够调整数据库上的负载。这将需要在消息传递和数据库之间开发一个单独的层。
- 同样,使用主题订阅传入订单以创建连续查询的效果(消费订单并将其持久化到数据库的层将负责发送更新)。
- 许多消息代理实现还支持集群/分布式以实现额外的并行化和可扩展性(例如,HornetQ)。
请注意,通过消息传递,您可以同时拥有高可用性、可靠性和可伸缩性。
数据库级别
假设您使用 Oracle 作为数据库,对于您的问题 1-3,您至少有以下选项:
- 按地区/日期范围/客户名称/其他类别对表格进行分区——无论适合您的特定情况——将为您提供一些扩展读/写的空间。如果您有大量可供 Oracle 使用的 CPU 内核,则适当的分区可能会利用并行化水平显着提高对大型数据集的查询性能(在一个项目中,我们将处理大型数据集的时间从 5 小时缩短到 10 分钟)。
- 结合 Oracle Advanced Queuing 的 INSERT 触发器可用于实现连续查询(尽管在某些情况下,外部消息传递代理可能会更好地工作)。
- 见#1。
事实上,您可以考虑将上述方法组合起来,以针对您的特定情况实现最佳性能和可伸缩性。
我没有考虑迁移到 NoSQL 数据存储,因为 IMO,NoSQL 解决方案并不是最适合数据一致性至关重要的应用程序,我认为这是您的情况。