【问题标题】:Can RocksDB handle multiple read-only clients? [closed]RocksDB 可以处理多个只读客户端吗? [关闭]
【发布时间】:2014-04-24 14:08:38
【问题描述】:

我需要一个键值数据库,比如 redis 或 memcached,但不是在内存中,而是在磁盘上。填充数据库后(我们定期从头开始),我实际上只需要 get 操作,但来自许多不同的进程(所以京都内阁和 LevelDB 不适合我)。

我需要大约 500 万个键和 ~10-30gb 的数据,所以其他一些简单的数据库不能正常工作。

我找不到任何关于RocksDB 是否可以处理多个只读客户端的信息;在我的操作系统上构建并不简单,所以我想在这样做之前先问一下。如果不能,是否有任何数据库可以工作?最好使用 Ubuntu 包和 Python 绑定;-)。

我们现在只是在使用很多很多的小文件,但这真的很糟糕,因为我们想要简单的备份、复制等。我也怀疑这可能会导致速度变慢,但这并不重要。

【问题讨论】:

  • 你考虑过 SQLite 吗?
  • 其实,不。这样的用例真的好吗?
  • 是的,只需创建一个包含键/值列的表。您将使用普通 SQL 来访问该表。不确定键是否可以是纯二进制的。随着 WAL(Write-ahead-logging)的出现,您甚至可以支持与多个阅读器并行写入。 SQLite 虽然只支持单个并发编写器。另请注意,尽管您说“进程”,但如果您指的是不同的计算机,那么我会忽略 SQLite。 SQLite 适用于本地数据库,但不适用于网络数据库。

标签: python key-value leveldb kyotocabinet rocksdb


【解决方案1】:

是的,您应该能够在单个 RocksDB 数据库上运行多个只读客户端。只需使用 DB::OpenForReadOnly() 调用打开数据库:https://github.com/facebook/rocksdb/blob/master/include/rocksdb/db.h#L108

【讨论】:

    【解决方案2】:

    最简单的答案可能是 Berkeley DB,绑定是标准库的一部分:https://docs.python.org/2/library/anydbm.html

    【讨论】:

    • 谢谢,我会试试的!出于某种原因,它说它已被弃用,我应该使用 pybsddb:jcea.es/programacion/pybsddb_doc/contents.html
    • 在我发现的每个基准测试中,与所有最近的 key-val DB 相比,Berkeley DB 的表现都非常糟糕。
    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多