【问题标题】:Highest Performance Database Storage Mechanism最高性能的数据库存储机制
【发布时间】:2009-01-27 21:28:15
【问题描述】:

我需要一些想法来实现(真正的)高性能内存数据库/存储机制。在存储 20,000 多个对象的范围内,每个对象每 5 秒左右更新一次。 我想要一个 FOSS 解决方案

我最好的选择是什么?你有什么经验?

我主要使用 Java 工作,但我需要数据存储具有良好的性能,因此数据存储解决方案不需要以 Java 为中心。

我还需要能够查询这些对象,并且我需要能够在程序启动时恢复所有对象。

【问题讨论】:

    标签: sql database performance storage data-storage


    【解决方案1】:

    SQLite 是一个开源的自包含数据库,支持内存数据库(只需连接到:memory:)。它具有许多流行编程语言的绑定。它是一个传统的基于 SQL 的关系数据库,但您无需运行单独的服务器——只需将其用作程序中的库即可。它很快。是否足够快,我不知道,但可能值得一试。

    Java driver.

    【讨论】:

      【解决方案2】:

      您是每 5 秒更新 20K 对象还是每 5 秒更新 20K 对象之一?

      什么样的对象?为什么传统的 RDBMS 不够用?

      【讨论】:

      • 每 5 秒更新一次所有 20,000 个对象。传统的 RDBMS 似乎没有能力跟上这一点(我可能错了)
      • 这些对象是专有的。大约有 20 个左右的字段具有两个 1-Many 关系。
      • 我认为大多数现代 RDBMS 会根据内存和硬盘来处理这个问题。您将受到更新性质等因素的更多限制(是基于集合的调用或 20K 单独调用)
      • 我也会质疑 - 如果你可以将 ACID 原则抛到窗外。许多内存数据库技术人员无法提供您可能想要的持久性水平
      【解决方案3】:

      查看HSQLDBPrevayler。 Prevayler 是对传统 RDBMS 的一种范式转变——我在许多项目中都使用过(范式,即不是专门为 Prevayler),并发现它具有真正的优点。

      【讨论】:

        【解决方案4】:

        具体取决于您需要如何查询它,但您是否查看过 memcached?

        http://www.danga.com/memcached/

        如果您使用的是 PHP,其他选项可能包括 MySQL MEMORY TablesAPC Cache

        有关项目/要求的更多详细信息会有所帮助。

        【讨论】:

          【解决方案5】:

          内存存储?

          1) 一个简单的 C 'malloc' 数组,所有结构都将被索引。

          2) berkeleyDB:http://www.oracle.com/technology/products/berkeley-db/index.html。它很快,因为您构建了自己的索引(辅助数据库)并且没有要评估的 SQL 表达式。

          【讨论】:

            【解决方案6】:

            看看这里列出的一些产品:http://en.wikipedia.org/wiki/In-memory_database

            【讨论】:

              【解决方案7】:

              您需要什么级别的耐用性?如果将数据写回磁盘,则对于大多数 IO 硬件而言,每 5 秒更新 20,000 次就事务数量而言可能是困难的。

              如果您有能力丢失一些更新,您可以每 100 毫秒将其刷新到磁盘,如果您的数据库和操作系统支持这样做,那么使用相当便宜的硬件不会有问题。

              如果它真的是一个您不想经常刷新到磁盘的内存数据库,那听起来很简单。我听说 H2 相当不错,但 SQLite 也可以。一个经过适当调整的 MySQL 实例也可以做到(但可能更复杂)

              【讨论】:

                【解决方案8】:
                【解决方案9】:

                Chronicle Map 是一个纯 Java 键值存储

                • 它具有非常高的性能,支持1 million writes/second from a single thread。无法用 Java 编写快速数据库是一个神话。
                • 无缝存储和加载任何可序列化的Java对象,提供简单的Map接口
                • LGPLv3

                由于您没有很多“表”,因此成熟的 SQL 数据库可能是一种过大的解决方案,索引和查询可以使用少数不同的键值存储来实现,这些键值存储由普通 Java 代码手动更新。编年史地图provides mechanisms 以使此类更新同时彼此隔离,如果您需要的话。

                【讨论】:

                • 并不是说你不能用 Java 获得一个快速的数据库。 Java 永远不会为您提供最快的数据库。只要您保持公平的竞争环境,任何解释性语言的性能都会下降。对于某些工作负载,惰性垃圾收集实际上比显式删除更有效(如在 DEFAULT C/C++ 中)。但是,如果您不在等效的 To-The-Metal 解决方案上使用垃圾收集框架,Java 只会在这些情况下获胜。 IBM 的 AIX 数据库仍然是金融交易领域的王者是有原因的,而且它不是用 Java 编写的。
                猜你喜欢
                • 2010-10-01
                • 2019-07-03
                • 1970-01-01
                • 2012-05-18
                • 1970-01-01
                • 2012-03-08
                • 2015-11-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多