gpt4 book ai didi

rdbms - 主内存数据库与对象数据库

转载 作者:行者123 更新时间:2023-12-01 11:10:07 24 4
gpt4 key购买 nike

我目前正在尝试选择数据库供应商。

我只是想从其他数据库开发人员那里征求一些个人意见。

我的问题特别针对以下人群:

1) 之前使用过支持复制到磁盘(混合)的主内存数据库(MMDB)(即 ExtremeDB )

2) 使用过Versant Object Database和/或 Objectivity Database和/或 Progress ObjectStore

问题是:如果您可以根据您的经验推荐适合我的应用程序的数据库供应商。

我的应用程序是一个商业实时(读作:高性能)面向对象的 C++ GIS 类应用程序,我们需要在其中进行大量的纬度/经度搜索(即给定一个区域,在其中找到所有匹配的目标区域...R-Tree 索引)。

我想存储到数据库中的数据类型都被建模为对象,它们使用 std::list 和 std::vector,所以自然地,对象数据库似乎是有意义的。我已经阅读了足够多的文章以说服自己传统的 RDBMS 可能不是我真正想要的

  1. 性能(连接或多个动态长度数据表,如列表/向量)
  2. 易于编程(阻抗不匹配)

但是,就性能而言,

  1. 输入数据以大约 40 MB/s 的速度输入系统。

  2. 因此,系统也将以每秒大约 350 次插入的速度插入数据库(其中每个对象从 64KB 到 128KB 不等),

  3. 将通过多个线程持续搜索和更新数据库。

据我了解,我在此处列出的所有对象数据库都使用缓存来存储数据库对象。 ExtremeDB 声称,由于它是专门为内存设计的,因此可以避免缓存逻辑等开销。通过谷歌搜索查看更多内容:Main Memory vs. RAM-Disk Databases: A Linux-based Benchmark

所以..我只是有点困惑。对象数据库可以在实时系统中使用吗?它和 MMDB 一样“快”吗?

最佳答案

从根本上说,MMDB 和 OODB 之间的区别在于,MMDB 期望其所有数据都基于 RAM,但在某个时候持久保存到磁盘。而 OODB 更为传统,因为不期望整个 DB 适合 RAM。

MMDB 可以通过放弃持久数据不一定必须“匹配”RAM 数据的概念来利用这一点。

任何具有持久性的方法都将起作用,它必须以某种方式在更新时将数据写入磁盘。

几乎所有的数据库都为此使用某种日志。这些日志基本上是附加到文件的“原始”数据页,或者可能是单独的事务。当文件变得“太大”时,将启动一个新文件。

一旦日志被适本地合并到主存储中,日志就会被丢弃(或重新使用)。

现在,一个原始的 RAM DB 可以简单地通过将事务附加到日志文件而存在,并且当它重新启动时,它只是将日志加载到 RAM 中。所以,本质上,日志文件就是数据库。

这种技术的缺点是您拥有的事务越长、越多,您的日志/数据库就越大,因此数据库启动时间也就越长。但是,理想情况下,您还可以“快照”当前状态,这会消除所有最新的日志,并有效地压缩它们。

以这种方式,数据库的所有常规操作都必须管理的是将页面附加到日志,而不是更新其他磁盘页面、索引页面等。因为,理想情况下,大多数系统不需要“启动”通常,启动时间可能不是问题。

因此,通过这种方式,MMDB 可以比与磁盘有不同契约的 OODB 更快,维护日志和磁盘页面。通过这种方式,即使整个数据库都适合 RAM 并被正确缓存,OODB 也可能会更慢,这仅仅是因为在正常操作期间您会在日志操作之外进行磁盘操作,而 MMDB 则这些操作作为“维护”发生任务,可以安排在停机时间和/或安静时间。

至于这两个系统能不能满足你实际的性能需求,我不好说。

关于rdbms - 主内存数据库与对象数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879093/

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