问题标签 [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 投票
1 回答
252 浏览

nosql - Memcached/其他键值引擎隔离

我在平衡器后面有一堆 Web 服务器(前端)。对于每个虚拟主机,每个 apache 进程都使用自己的用户运行。apache 运行的代码是 PHP,它不是受信任的代码。我需要共享(在 Web 服务器之间)会话存储并限制用户(虚拟主机)只能访问它的会话存储。所以我想避免一个租户能够清除或损坏 memcached 存储的数据。所以我基本上是在寻找对用户进行身份验证+创建私有存储桶的解决方案。我知道总有可用的 MySQL 方式,但我想避免 SQL 层引入的性能损失。

到目前为止,您有什么解决方案吗?

0 投票
4 回答
8623 浏览

image - 中到大值的键值存储

我们有一个存储(个位数)数百万张图像的系统,大小从 8KB 到 500KB 不等,中位数约为 15KB,平均为 30KB。总数据集目前约为 100GB。我们希望基于图像的哈希访问图像(这可以更改,但它需要可以从图像计算,以便有效地检查图像是否已经在数据存储中 - 图像被处理,使得两个如果图像是逐字节相同的,则图像是逐像素相同的)。坚持(显然)很重要。

目前我们将它们全部作为文件存储在一个目录中——目录列表被内核缓存,实际的文件读取是根据需要完成的。据我了解,键值存储(与使用文件系统相比)的主要优点是读取较小的值,因为可以缓存整个页面,而不仅仅是单个值。当前所有访问都来自与数据位于同一服务器上的 Web 服务器(在 Intranet 上),尽管我们可能会检查是否存在来自远程机器的密钥(主要通过 10GbE 连接)。

没有任何特别的理由来改变它,尽管随着系统的其他主要部分发生变化,重新考虑当前的方法似乎是值得的。

给定一个工作负载,其读取主要是(单次)按插入顺序读取和随机(尽管很可能重复)访问任意键,除了频繁的写入(大约 1:10 的写入:读取),是否有可能从文件系统迁移到键值存储有多大优势?

0 投票
1 回答
277 浏览

mongodb - 将 SQL 迁移到键值和 MapReduce

我有一个带有两个这样的表的 SQL 数据库:

为了避免连接(在非常大的结果集上),我想将其移至 NoSQL(即 MongoDb)键值存储。

  1. 将这种结构按原样移动到 KV 数据库是否有意义?如果没有,我是否应该添加另一个表,如 User_Orders 关联用户和订单?

我有一个在网格中显示订单的屏幕,但我还想显示用户名。在 SQL 中,我将使用连接从数据库中提取它。

  1. 除了按 Order.UserId 查询数据库一次以获取相关用户之外,NoSQL 中是否存在等价物(无连接)?如果不是,假设我的架构允许我运行多个前端和应用程序服务器,我如何在这种情况下应用(分布式?)Map-Reduce 来实现相同的目标?

谢谢!

0 投票
1 回答
776 浏览

objective-c - 如何在应用程序本身内存储可可应用程序的键值数据?

我有一个包含用户数据的信息字典。目前,它被写入与应用程序相同目录中的 xml 文件。但是,我很确定 cocoa 允许我将此 xml 文件写入应用程序包或应用程序内的某个资源目录中。

有人可以教我如何做到这一点吗?

0 投票
2 回答
681 浏览

php - PHP 中的 SplObjectStorage 和含糖语法

快一个;我怀疑这是可能的,但是有没有办法利用array($key => $value);PHP 的语法来处理SplObjectStorage对象?

我的意思是,有没有这样的方法可以实现:

在初始化对象存储的上下文中?截至目前,我只是在使用:(并且可能会继续,考虑到这种可能性的绝对可能性

会很好,高度怀疑它,但也许有人知道得更好。

0 投票
1 回答
615 浏览

database - Redis 复制问题

我有一个 Redis 主节点,它将由主应用程序填充。然后我将拥有这个 Redis 节点的多个从属节点,这些节点可能在不同的地理位置。这些节点将被该节点附近的应用程序读取。

应用程序1。从站1

应用 2。从站2

现在 App1 和 App2 以某种方式相关,我不希望出现特定数据在 Slave1 而不是 Slave2 可用的情况。

换句话说,我不想要任何同步延迟。我希望同时同步数据。

是否有可能是主服务器将更新推送给从服务器,而不是从服务器请求它。

0 投票
1 回答
3419 浏览

key-value-store - 对象存储和键值数据库有什么区别?

从用户的角度来看,这似乎是一回事。

0 投票
2 回答
2350 浏览

php - 用于 php 程序的快速大规模键值存储

我正在为我的一个项目开发一个全文索引系统。作为索引页面过程的一部分,它将数据分成非常非常多的非常小的片段。

我已经将片段的大小降至恒定的 20-30 字节,并且可能更小,它基本上是 2 个 8 字节整数和一个浮点数,构成了实际数据。

由于我正在寻找的规模和由此产生的件数,我正在寻找 mysql 的替代品,它在价值设置远低于我的目标时显示出重大问题。

我目前的想法是键值存储将是最好的选择,我已经相应地调整了我的代码。

我尝试了一个数字,但由于某种原因,它们的扩展性似乎都比 mysql 还要小。

我希望存储数亿或数十亿或更多的键值对,因此我需要一些不会随着大小而导致性能大幅下降的东西。

我已经尝试过 memcachedb、membase 和 mongo,虽然它们都很容易设置,但它们都没有适合我。

由于所需的密钥数量和可用内存有限,membase 的问题最多。写入速度在这里非常重要,因为这是一个非常接近均衡的工作量,我写了一次,然后读回几次并存储它以供最终更新。

我不需要太多的删除性能,我更喜欢可以很好地集群的东西,因为我希望最终能够跨机器扩展,但它现在需要在单台机器上工作。

我也希望使这个项目易于部署,因此简单的设置会更好。该项目是用 php 编写的,因此需要从 php 轻松访问。

我不需要行或其他更高级别的抽象,在这种情况下它们大多没用,我已经从我的其他一些测试中制作了代码以获取键值存储,这似乎很可能是最快的,因为我只有 2 个东西可以从第三个键控的行中检索到,所以使用键值存储几乎不需要做额外的工作。有谁知道任何可以像这样扩展的易于使用的项目?

我正在使用这个存储来存储三个数字的单个集合,(大小取决于它们在 mysql 中的存储方式,在其他存储位置可能不是真的) 2 个八字节整数,一个用于文档的 ID,一个用于对于单词的 ID 和该单词在文档中所占比例的浮点表示(作品出现的次数除以文档中的单词数)。此数据的索引是单词 id 和文档 id 所属的范围,每次我需要检索此数据时,它将是给定单词 id 的所有结果。我目前将单词 id、范围和该单词/范围组合的计数器分别转换为数字的二进制表示,并将它们连接起来形成密钥以及 2 位数字,以说明我存储的该密钥的值,

性能测量有点主观,查看将数据放入存储或从存储中提取数据的过程的输出,查看它处理文档的速度以及快速刷新我的统计计数器,以跟踪更准确的系统运行速度的统计信息并查看我使用每种存储方法时的差异。

0 投票
2 回答
1192 浏览

java - 可嵌入的基于磁盘的键值存储

我们正在开发一个项目,该项目将使用单个 jar 文件进行分发。我们需要一些具有以下属性的键值对存储:

  1. 可嵌入到我们的 jar 文件中,因此无需额外安装。
  2. 可容纳数千万双
  3. 内存高效。这意味着 50M 对少于 100M
  4. 键和值都是简单类型:long、int、small byte[]
  5. 用于商业用途的免费许可是一种奖励
  6. 我们不需要并发、ACID 或此类高级的东西。
  7. 摊销查找时间低于 100 微秒。

除了 BerkelyDB 或 JDBM2/3 之外还有什么建议吗?

0 投票
2 回答
2123 浏览

key-value - LevelDB 快照能否在数据库关闭后继续存在?

我想知道 LevelDB 库的“快照”工具是否可以创建一个快照引用,即使在打开的数据库对象关闭后也可以保存该引用(因此可以在后续打开时重用)。

我怀疑不是,这导致了后续行动:是否有一种好的/推荐的方法来对数据库进行一致的备份作为快照即时,理想情况下即使其他活动仍在继续?(也就是说,没有通过 API 迭代整个快照键范围?)

(本质上,我正在寻找类似于通过某个检查点将 BerkeleyDB-JE 的仅附加 JDB 日志文件放在一边的东西。)