问题标签 [key-value]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
9085 浏览

python - 可靠高效的 Linux 键值数据库?

我需要一个快速、可靠且内存高效的 Linux 键值数据库。我的密钥大约是 128 字节,最大值大小可以是 128K 或 256K。数据库子系统不应使用超过 1 MB 的 RAM。总数据库大小为 20G (!),但一次只能访问一小部分随机数据。如有必要,我可以将一些数据块移出数据库(移至常规文件),因此最大大小可降至 2 GB。数据库必须在系统崩溃时幸存下来,而不会丢失最近未修改的数据。我将有大约 100 倍于写入的读取。如果它可以使用块设备(没有文件系统)作为存储,那将是一个加号。我不需要客户端-服务器功能,只需要一个库。我需要 Python 绑定(但如果它们不可用,我可以实现它们)。

我应该考虑哪些解决方案,您推荐哪一个?

我知道哪些候选人可以工作:

  • Tokyo Cabinet(Python绑定为pytc,另见pytc示例代码,支持hash和B+trees,事务日志文件等,bucket数组的大小在数据库创建时固定;作者必须关闭文件给别人一个机会;大量的小写入,每个文件都重新打开非常慢;Tyrant 服务器可以帮助处理大量的小写入;Tokyo Cabinet、Tokyo Tyrant 和 Berkeley DB 之间的速度比较
  • VSDB(即使在 NFS 上也是安全的,没有锁定;障碍呢?;更新非常慢,但没有 cdb 慢;最后一个版本在 2003 年)
  • BerkeleyDB(提供崩溃恢复;提供事务;bsddbPython 模块提供绑定)
  • Samba 的 TDB(带有事务和 Python 绑定,一些用户经历了损坏,有时mmap()是整个文件,repack操作有时会使文件大小翻倍,如果数据库大于 2G(即使在 64 位系统上),也会产生神秘的故障,集群实现(CTDB ) 也可用;在大量修改后文件变得太大;在大量哈希争用后文件变得太慢;没有内置方法来重建文件;通过锁定单个哈希桶实现非常快速的并行更新)
  • aodbm(仅附加,因此可以在系统崩溃中幸存下来,使用 Python 绑定)
  • hamsterdb(使用 Python 绑定)
  • C-tree(成熟的、多功能的高性能商业解决方案,有一个减少功能的免费版本)
  • 旧的TDB(从 2001 年开始)
  • bitcask(日志结构,用 Erlang 编写)
  • 各种其他 DBM 实现(例如 GDBM、NDBM、QDBM、Perl 的 SDBM 或 Ruby 的;可能它们没有适当的崩溃恢复)

我不会使用这些:

  • MemcacheDB(客户端-服务器,使用 BereleleyDB 作为后端)
  • cdb(需要在每次写入时重新生成整个数据库)
  • http://www.wildsparx.com/apbcdb/(同上)
  • Redis(将整个数据库保存在内存中)
  • SQLite(如果没有定期清理它会变得非常慢,请参阅 Firefox 3.0 中位置栏中的自动完成,即使 sqlite 3.1 及更高版本允许auto_vacuuming;当心:小型写入事务可能非常慢;当心:如果一个繁忙的进程是做许多事务,其他进程饿死,他们永远无法获得锁)
  • MongoDB(过于重量级,将值视为具有内部结构的对象)
  • Firebird(基于 SQL 的 RDBMS,太重了)

仅供参考,最近一篇关于Linux 杂志中键值数据库的文章。

仅供参考,较旧的软件列表

仅供参考,MemcacheDB、Redis 和 Tokyo Cabinet Tyrant 的速度比较

StackOverflow 上的相关问题:

0 投票
1 回答
438 浏览

java - 键 - > 带有二进制附件的值存储

一个额外的要求是附件可以存储为流,因为可能需要保存非常大的二进制文件。视频等

我看过 Voldemort 和其他键值存储,但它们似乎都期望字节数组,这是完全不可能的。

最好用 Java 编写,并且可以嵌入。

用例是:我编写了一个具有多个后端的 HTTP 缓存库。

我有一个基于内存的(使用哈希图和字节数组)、Derby 数据库、带有文件附件的持久哈希图、带有文件附件的 EHCache。

我希望那里有一些不使用文件系统的东西,或者如果使用,它对 API 是透明的。

我将带有更多元信息的标头存储在数据存储中。但我还需要存储 HTTP 响应的有效负载。

HTTP 响应负载可能非常大,这就是我需要使用流媒体的原因。

0 投票
3 回答
566 浏览

php - 创建没有数组的 php 键值对的实例

我正在编写一个递归函数来构造一个多维数组。基本上,问题如下:

想法?我知道我可以重写函数的结构以使其工作,但似乎没有必要这样做。

0 投票
6 回答
1086 浏览

scalability - 是否有任何稳定和生产质量的 nosql 数据存储?

是否有可以在生产系统上使用的生产质量 nosql 存储。我看过 cassandra、tokyodb、couchdb 等,但它们似乎都没有准备好在生产环境中进行部署。我说的是每分钟数千个请求和大量读取/写入/更新。我唯一关心的是速度和服务时间。有人知道有效使用 nosql 存储的生产系统吗?有谁知道由 Google/Yahoo/IBM 等大企业支持的 nosql 商店?

0 投票
3 回答
924 浏览

google-app-engine - 是否有一个 nosql 存储也允许存储实体之间的关系?

我正在寻找也提供存储/维护存储实体之间关系的 nosql 键值存储。我知道 Google App Engine 的数据存储允许实体之间的拥有和非拥有关系。是否有任何流行的 nosql 商店提供类似的东西?

尽管它们中的大多数都没有模式,但是否有方法可以将关系适当地应用于键值存储?

0 投票
1 回答
13407 浏览

c# - C# Linq 结果 ToDictionary 帮助

我有一个从字典中获取结果的 lambda 表达式。

表达式拉回我需要的对,我可以在 IDE 的调试模式下看到它们。

如何将其转换回与源相同类型的字典?我知道 sortedDict 的 TElement 是 KeyValuePair,但我无法完全理解 ToDictionary 扩展方法的语法。我还尝试使用 var 结果分段构造一个新字典,但无济于事。

有没有这样的东西(功能方面):

0 投票
3 回答
1031 浏览

php - 动态数组键添加

这是我的预编码...

这是我的代码...

使用它,我得到以下结果......

现在,问题是这是我想要的确切结果,但我不想使用eval().

作为我的代码的输入,我有一个列表keys和一个number. number应该设置为用于为某个数组keys生成基于子项的数组的值。keys$array

有没有不同的方法可以实现这一目标?我不想在代码工作时用新值覆盖键/数字 -eval()已经保留了这个,所以我的新代码应该做同样的事情。

0 投票
5 回答
21284 浏览

java - 使用 PostgreSQL 数据库作为简单键值存储的最佳方式

我被要求使用 postgreSQL 数据库,它将取代我目前使用的 berkeleyDB。虽然; 我意识到这不是一个理想的情况,它超出了我的控制范围。

所以问题是……如果你需要将 postgreSQL 变成一个键值存储,你将如何做这件事,同时让它尽可能高效?

我的值是字节数组,我的键是字符串,我可以对这些字符串的长度施加一些限制。

我假设我应该为我的值和主键列使用一个 blob 来保存键,但是当我刚刚冒险进入这个旅程时,我很好奇堆栈溢出社区中是否有人这样做,或者是否有任何特定的“陷阱”我应该注意。

0 投票
1 回答
2533 浏览

objective-c - 如何在不使用数组的情况下向 NSMutableDictionary 添加多个键和值?

我知道您可以将所有键添加到数组中并将其添加到字典的一侧,但我很好奇您如何在字典中的某个点添加或插入值。我现在拥有它的方式我相信它只是不断覆盖最后的条目以为新条目腾出空间:

继承人的输出:

2010-01-13 11:08:51.484 assignment_1b[6035:a0f] http://www.apple.com

0 投票
12 回答
4128 浏览

scalability - 动态水平可扩展键值存储

是否有一个键值存储可以为我提供以下信息:

  • 允许我简单地添加和删除节点,并将自动重新分配数据
  • 允许我删除节点,但仍然有 2 个额外的数据节点来提供冗余
  • 允许我存储最大 1GB 的文本或图像
  • 可存储高达 100TB 数据的小型数据
  • 快速(因此将允许在其上执行查询)
  • 让所有这些对客户透明
  • 适用于 Ubuntu/FreeBSD 或 Mac
  • 免费或开源

我基本上想要一些我可以使用“单一”的东西,而不必担心拥有 memcached、一个数据库和几个存储组件,所以是的,我确实想要一个你可以说的数据库“银弹”。

谢谢

祖拜尔

到目前为止的答案:BackBlaze 之上的 MogileFS - 据我所知,这只是一个文件系统,经过一些研究,它似乎只适用于大图像文件

东京暴君 - 需要光云。当您添加新节点时,这不会自动缩放。我确实对此进行了研究,但对于适合单个节点的查询似乎非常快

Riak - 这是我自己调查的一个,但我还没有任何结果

Amazon S3 - 有人在生产中使用它作为他们唯一的持久层吗?从我所见,它似乎用于存储图像,因为复杂的查询太贵了

@shaman 建议 Cassandra - 绝对是我正在研究的一个

到目前为止,似乎没有满足我提到的标准的数据库或键值存储,即使在提供 100 分的赏金之后,问题也没有得到回答!