gpt4 book ai didi

Java 快速数据存储和检索

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:24 25 4
gpt4 key购买 nike

我需要将记录存储到持久存储中并按需检索。要求如下:

  1. 极快的检索和插入
  2. 每条记录都有一个唯一的键。此 key 将用于检索记录
  3. 存储的数据应该是持久的,即应该在 JVM 重启时可用
  4. 一个单独的进程会每天一次将过时的记录移动到 RDBMS

大家怎么看?由于延迟问题,我无法使用标准数据库。像 HSQLDB/H2 这样的内存数据库有性能限制。此外,记录是简单的字符串对象,不符合 SQL 条件。我正在考虑某种基于平面文件的解决方案。有任何想法吗?任何开源项目?我敢肯定,以前一定有人解决过这个问题。

最佳答案

有很多不同的工具和方法,但我认为没有一种可以在所有需求中脱颖而出。

对于低延迟,您只能依赖内存中的数据访问 - 磁盘在物理上太慢(SSD 也是如此)。如果单台机器的内存放不下数据,我们必须将数据分发到更多的节点,以累积足够的内存。

为了持久性,毕竟我们必须将数据写入磁盘。假设最优组织这可以作为后台 Activity 完成,不会影响延迟。但是为了可靠性(failover,HA等等),磁盘操作不能完全独立于访问方式:我们在修改数据时必须等待磁盘,以确保我们的操作不会消失。 并发也增加了一些复杂性和延迟。

数据模型这里不做限制:大部分方法都支持基于唯一键的访问。

我们必须决定,

  • 如果数据适合一台机器的内存,或者我们必须找到分布式解决方案,
  • 如果并发是一个问题,或者没有并行操作,
  • 如果可靠性非常严格,我们就不能松动修改,或者我们可以接受意外崩溃会导致数据丢失的事实。

解决方案可能是

  • 使用标准 java 库、文件等自行实现的数据结构可能不是最佳解决方案,因为可靠性和低延迟需要巧妙的实现和大量测试,
  • 传统 RDBMS 具有灵活的数据模型、持久的、原子的和隔离的操作、缓存等 - 它们实际上知道得太多,而且大多难以分发。这就是它们速度太慢的原因,如果您无法关闭不需要的功能(通常是这种情况)。
  • NoSQL键值存储 是不错的选择。这些术语非常模糊,涵盖了很多工具。例子是
    • BerkeleyDB 或 Kyoto Cabinet 作为单机持久键值存储(使用 B 树):如果数据集小到足以容纳一台机器的内存,则可以使用。
    • Project Voldemort 作为分布式键值存储:在内部使用 BerkeleyDB java 版本,简单且分布式,
    • 作为分布式键值存储的 ScalienDB:可靠,但写入速度也不会太慢。
    • MemcacheDB、Redis 等具有持久性的缓存数据库,
    • 流行的 NoSQL 系统,如 Cassandra、CouchDB、HBase 等:主要用于大数据。

可以找到 NoSQL 工具列表,例如。 here .

伏地魔的 performance tests报告亚毫秒响应时间,这些可以很容易地实现,但是我们也必须小心硬件(如上面提到的网络属性)。

关于Java 快速数据存储和检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572574/

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