gpt4 book ai didi

java - 低延迟读写的持久化策略

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:45 25 4
gpt4 key购买 nike

我正在构建一个应用程序,其中包含一个或多或少以交互方式批量标记数百万条记录的功能。用户交互与 Gmail 非常相似,用户可以在其中标记单个电子邮件或批量标记大量电子邮件。我还需要快速读取这些标签成员资格,以及读取模式或多或少是随机的。

现在我们正在使用 Mysql 并为每个标签文档对插入一行。将数百万行写入 Mysql 需要一段时间(高 I/O),即使使用批量插入和大量优化也是如此。我们需要这是一个交互式过程,而不是批处理过程。

对于我们正在存储和读取的数据,数据的一致性和可用性不如性能和可扩展性重要。因此,如果在写入过程中发生系统故障,我可以处理一些数据丢失。但是,数据肯定需要在某个时候持久化到辅助存储。

所以,总而言之,这里是要求:

  • 可能有数千万条记录的低延迟批量写入
  • 数据需要以某种方式持久化
  • 低延迟随机读取
  • 不需要持久写入
  • 最终一致性没问题

以下是我看过的一些解决方案:

  • 写入缓存(Terracotta、Gigaspaces、Coherence),其中记录被异步写入内存并排空到数据库。这些让我有点害怕,因为它们似乎增加了我想要避免的应用程序的一定复杂性。
  • 高度可扩展的键值存储,例如 MongoDB、HBase、Tokyo Tyrant

最佳答案

如果您有为此使用 Coherence 的预算,我强烈建议您这样做。在 Coherence 中直接支持后写、最终一致性行为,并且它在数据库中断和 Coherence 集群节点中断时都非常容易恢复(如果您在单独的 JVM 上使用 >= 3 个 Coherence 节点,最好在单独的主机上)。我已经为一家财富 100 强公司的电子商务网站实现了此方法来执行大容量 CRM,并且效果非常好。

此架构的最佳方面之一是,您编写 Java 应用程序代码时就好像没有发生任何后写行为,然后插入使其发生的 Coherence 拓扑和配置。如果您以后需要更改 Coherence 的行为或拓扑,则无需更改您的应用程序。我知道可能有一些合理的方法可以做到这一点,但这种行为在 Coherence 中得到直接支持,而不是必须发明或手动实现一种方法。

要提出一个非常好的观点 - 您对增加应用程序复杂性的担心是一个好主意。使用 Coherence,您只需将更新写入缓存(或者如果您使用的是 Hibernate,它可以是 L2 缓存提供程序)。根据您的 Coherence 配置和拓扑,您可以选择部署您的应用程序以使用后写式、分布式缓存。因此,由于缓存的特性,您的应用程序不再复杂(坦率地说,您并不知道)。

最后,我在 2005-2007 年实现了上述解决方案,当时 Tangosol 制作了 Coherence,他们得到了最好的支持。我不确定 Oracle 现在的情况如何 - 希望仍然很好。

关于java - 低延迟读写的持久化策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com