gpt4 book ai didi

database - RocksDB 的一个不寻常的使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:52:37 25 4
gpt4 key购买 nike

我想使用 RocksDB 的方式我觉得很不寻常。我想用它来降低内存中有大量字符串的应用程序的内存压力。原因是因为应用程序最终会扩展到需要数十 GB 的 RAM 来存储所有字符串的程度。这是一个仅 64 位的应用程序,部分用 C++ 编写,部分用 VB.NET 编写(我知道。我知道。)

我的任务是将所有字符串移动到磁盘。

我想尽可能表现出色。当然我可以使用像 SQLite 这样的东西,但我真的根本不需要 SQL。我只需要一个键/值存储。键可以是 32 位整数,值是字符串。典型的字符串长度为 1K 到 5K。

所需的性能特征如下:

  1. 正在将字符串批量写入磁盘。编写后,它们很少被修改。大多数时候,它们只是只读的。
  2. 将字符串写入磁盘只是为了将它们移出 RAM。将所有字符串同时保存在RAM中,为了性能,会打败人。理想情况下,我可以指定占用多少 RAM 作为缓存。
  3. 耐用性并不重要。我不在乎写缓存是否需要很长时间。实际上,我只关心在超过上面(2)中指定的缓冲区大小时才写入磁盘的字符串。例如,如果磁盘上有十亿个字符串,并将其中的一千个字符串保存在 RAM 中(作为我的缓冲区大小),我会同意在第 10 个字符串被写入磁盘之前不将其写入磁盘分配。

到目前为止,我看过的几乎所有系统,memcached、redis、leveldb、lightning、sqlite 4 中的 LSM,都解决了不同的问题。有些解决了确保事物持久耐用的问题,因此需要做很多事情来确保事物防撞。显然,就我而言,我不关心防撞的事情。我的应用程序将在应用程序启动时重新创建数据存储。如果我的应用程序崩溃,我不关心磁盘上剩余的内容。还有一些(例如 memecached)通过首先将内容放入 RAM 来优化磁盘性能。它正在解决与我需要解决的问题几乎相反的问题。

最终,由于这是一个 64 位系统,我希望系统使用内存映射文件进行优化。

RocksDB 是最接近我认为我需要使用的工具的工具,但它是一个非常困惑和复杂的系统,具有一百万个设置。此外,我的具体场景不在其发布的任何“食谱”中。

所以我很好奇 RocksDB 团队是否有人愿意给我一些指导。如果我能让它工作,我将非常感激,并且一定会帮助在线其他人解决相同类型的问题。

最佳答案

我不太明白您所说的需要将数据移动到磁盘但不需要持久性的部分。

除此之外,leveldb 将是一个不错的选择:

*fast writes
*ability to do atomic bulk insert (WriteBatch)
*low memory footprint
*fast key lookup (and fast iterator to read adjacent data)

您没有指定平台,但它在 Linux 上是 native 的,或者您可以使用 windows port ( .net wrappers) 在 Windows 上。

关于database - RocksDB 的一个不寻常的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368424/

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