问题标签 [key-value-store]

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 投票
6 回答
18248 浏览

database - 无模式数据库系统的吸引力是什么?

我已经听到很多关于无模式(通常是分布式)数据库系统的讨论,比如 MongoDB、CouchDB、SimpleDB 等......

虽然我可以理解它们对于某些目的可能很有价值,但在我的大多数应用程序中,我都试图保留具有特定类型的特定数量字段的对象,并且我只是自动在关系模型中思考。我一直在考虑具有唯一整数 id 的行、null/not null 字段、SQL 数据类型以及用于查找集合的选择查询。

虽然我被这些新系统的分布式特性和简单的 JSON/RESTful 接口所吸引,但我不明白松散类型的键/值哈希对我的开发有何帮助。为什么松散类型、无模式的系统有利于保持干净的数据集?例如,当它们可能没有日期时,我怎样才能找到日期在 x 和 y 之间的所有项目?有加入的概念吗?

我知道许多系统都有自己的差异和优势,但我想知道范式的差异。我想这是一个开放式的问题,但也许社区的答案和他们个人看到这些系统优势的方式将有助于启发我和其他人什么时候想要使用这些(诚然更时髦的)系统而不是传统的关系型数据库。

0 投票
6 回答
343 浏览

performance - 在庞大的数据集上计算令牌计数器

我需要检查大量文本(> 2 Tb,维基百科完整转储)并为每个看到的令牌保留两个计数器(每个计数器根据当前事件递增)。我需要对这些计数器进行的唯一操作是增加。在第二阶段,我应该根据这些计数器计算两个浮点数并存储它们。

它应该执行以下步骤:

  1. 根据当前事件,检查大量文本并为找到的每个单词增加两个计数器。
  2. 遍历所有标记,并根据这些计数器为每个标记计算两个额外的浮点数。
  3. 允许查询(获取任何给定令牌的值)。

要求和其他细节:

  • 它必须扩展到 O(10^8) 令牌。
  • 最终结果需要非常快的查询!
  • 翻阅文本时,只会增加两个计数器。这是一次性处理,因此在处理过程中不会有任何查询。仅值更新。
  • 不需要动态/可更新模式。

我一直在尝试 CouchDB 和 MongoDB,但效果并不好。

您认为解决这个问题的最佳方法是什么?

谢谢!

编辑1:有人建议我尝试Patricia trie并测试所有键是否都适合内存(我怀疑它们不适合)。一个带有额外操作符的自定义 Patricia trie 用于在一个步骤中增加每个键的值可能是一种可能的解决方案。

编辑 2:澄清我所说的“巨大”的意思:> 2 Tb 的文本。更多说明。

编辑 3:唯一令牌估计。正如 Mike Dunlavey 所建议的,我尝试对独特的令牌进行快速估计。在数据集的前 830Mb 中,唯一令牌线性增长到 52134。除非在处理更多数据后唯一令牌的数量增长较慢(这很可能),否则应该有 O(10^8) 个唯一令牌。

编辑 4:首选 Java 和 Python 解决方案,但任何其他语言也可以。

编辑 5:通常令牌将仅包含可打印的 ASCII 字符,但它们可以包含任何可打印的 Unicode 字符。我将尝试相同的过程,同时保持小写和大写不变;并且仅用于小写。

0 投票
3 回答
1985 浏览

nosql - NoSQL 数据库和许多半大型 Blob

是否有适合存储大量(即 >10 亿)“中型”blob(即 20 KB 到 2 MB)的 NoSQL(或其他类型)数据库。我所需要的只是从 A(标识符)到 B(blob)的映射、给定 A 检索“B”的能力、用于访问的一致外部 API 以及“只需添加另一台计算机”以扩展系统的能力.

比数据库更简单的东西,例如分布式键值系统,可能会很好,我也很感激任何沿着这种思路的想法。

感谢您的阅读。

布赖恩

0 投票
2 回答
144 浏览

database - AIR 的面向文档的数据库?

今天刚得知Adobe Air有本地SQL数据库,很棒;然而,我们一直在创建 XML 和 JSON 文件来处理几乎所有的事情。与其重新构建我们的应用程序以获得一些新功能,不如使用嵌入式面向文档的数据库来简单地索引我们现有的数据文件似乎很有用。

所以问题是:让嵌入式面向文档的数据库在 Adob​​e Air 运行时中运行的最简单方法是什么?

0 投票
2 回答
1585 浏览

memcached - 是否有可以通知外部实体更改的内存键/值存储?

我已经阅读了有关内存中键/值存储的信息,但从未真正使用过。未受过教育的人首先想到的是 CouchDB 和 memcached(我知道 CouchDB 不一定是在内存中的,但经常这样使用)。

我正在寻找这些支持基本脚本的内存存储之一,以便我可以通知外部实体(通过 RESTful API)发生更改。一些初步研究表明,CouchDB 支持称为更改通知的东西

Memcached 似乎不支持这种类型的功能,并且是一种更通用的仅存储服务(同样,我的无知可能会在这里暴露出来)。

有没有人有这样做的经验?任何关于潜在陷阱或头痛的智慧之言?还有其他一些我没有列出的支持这些功能的软件吗?

0 投票
3 回答
3179 浏览

database - 是否有多键键值存储?

是否有专门的存储用于存储元组,即 t=(clicks,impressions,ctr) 散列在多个值上 - 比如说 pageId、categoryId、userId、sessionId 等等。

我知道我可以使用 MySQL、MongoDb 等来做到这一点。但我更多的是寻找一些专门的甚至可以嵌入(在Java中)的商店。它不需要像 RDMBS 那样提供复杂的查询语言或事务。但是原子性和持久性将是一个优点。;)

我认为这也可以用于存储多维聚合数据的 DWH 类型的应用程序,但我还没有找到任何这样的产品。

0 投票
2 回答
5947 浏览

mysql - 需要一个 MySQL 查询来从存储键值对的表中进行选择

我需要在数据库(mySQL)中以键值对的形式存储一些项目及其属性。我打算按以下方式进行。

我将使用两个表itemsitem_properties.

items

item_properties

现在,如果我必须选择“效果”为“冷却”的项目,我可以使用以下查询来做到这一点(结果将给出“AC”和“Fridge”)。

我想知道如何编写查询来选择匹配多个属性的项目,例如

  • 选择所有“效果”为“冷却”且“消耗”为“高效”的项目(与项目“AC”匹配)。
  • 选择“type”为“split”或“heatMethod”为“coil”或“c​​onsumption”为“effecient”的所有项目(匹配项目“AC”和“Heater”)。

请帮助...提前谢谢!

0 投票
4 回答
2571 浏览

database - 在使用文件哈希数据库的京都内阁数据库中,如何避免文件大小增加?

我正在使用以下打开:

我正在放置和删除元素。执行结束时,数据库为“空”,count() 函数返回 0,因为我删除了所有元素。为什么我重复测试时文件大小总是增加?是否可以运行诸如“垃圾收集器”之类的东西来清理已删除的寄存器?如果我执行相同的测试 100 次,我有一个 500 MB 大小的数据库,即使我只有 2 条记录。

我试图输入“tune_defrag=10000”,但我认为它不能正常工作。

Obs.:一个唯一的寄存器小于1K,我不明白为什么寄存器在磁盘上占用这么多空间。

谢谢你的帮助

0 投票
1 回答
298 浏览

performance - 允许索引的远程键值存储?

在我们的项目中,我们已经为对象嵌入了内存中的键值存储,它非常有用,因为它允许我们为它创建索引并根据它查询存储。因此,如果我们有一个“Student”的集合,并且在 student.group 和 student.sex 上有一个复合索引,那么我们可以找到“ABC”组中的所有男学生。删除等也是如此。

现在我们必须采用我们的服务在云中工作,这样会有多个服务器,处理用户请求,它们有一个共享的状态,存储在这个键值索引存储中。我们尝试采用 memcashed 来满足我们的需求,它几乎是理想的——它是快速、简单且经过验证的解决方案,但它没有索引,因此我们不能习惯于搜索我们的临时数据。

有没有其他方法可以拥有远程缓存,就像 memcashed 一样,但有索引?

谢谢你。

0 投票
2 回答
336 浏览

.net - 在 RavenDB 中存储对象的对象要求(限制)是什么

我正在研究 RavenDB 以在系统中使用(主要用作持久键值缓存),并且需要知道可以存储的实际数据的限制是什么。

文档指出“唯一的要求是根实体字符串 Id 属性”但是我看到的所有示例和教程都只存储简单的字符串、int、decimal、bool 数据类型。

是否可以存储此对象?

使用这个(sudo)代码?

并像这样把它拿回来:

感谢您的反馈,请原谅我人为的示例,这是我可以描述我正在尝试做的事情的最简单方法,而无需深入研究一堆领域知识/模型。

凯尔