问题标签 [voldemort]
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.
java - Java 项目中的 CouchDB、Project Voldemort、Cassandra
我只是在为当前项目评估一些 noSQL 解决方案。目前引起我注意的不同系统是
最后一个在我的评估中更搁置,因为他们写道
它仍然是一个新系统,它有粗糙的边缘、糟糕的错误消息,可能还有很多未捕获的错误。如果您找到其中之一,请告诉我们,以便我们修复它。
我正在寻找一个稳定的解决方案。另一件事是我想要一个好的Java支持。对于用 Erlang 编写的 cloudDB,有一些客户端库,ektorp似乎是最好的选择。这里的问题是,在我看来,ektorp 并没有被大量使用。如果我查看下载部分大约有。400 次下载。好的,大多数人会通过 maven 依赖来使用它,但 400 仍然让我感到惊讶。有一个关于 couchDB Java 库的旧 Stackoverflow 问题,但这也推荐使用 ektorp。现在是更好的解决方案吗?
目前,Cassandra 对我来说似乎是最稳定和成长的选择,但 cloudDB 感觉如此简单和整洁,但它缺乏某种 Java 工具来访问它,或者编写自己的客户端来访问 cloudDB 是否有意义?
hash - 在伏地魔中,为什么哈希环只延伸到 2^31-1?
在项目 voldemort 设计页面上:
http://project-voldemort.com/design.php
据说哈希环覆盖区间[0, 2^31-1]。
现在,区间 [0, 2^31-1] 代表 2^31 个总数,而最大的数 2^31-1 只是 31 位全部设置为 1。(为了说服自己,请考虑 2^3- 1. 2^3=8 是 0x1000。2^3-1=7 是 0x111)。
因此,如果使用普通的 32 位地址字来存储该值,则您有 1 位空闲。
因此,为什么 2^31-1 是上限?额外的位是否用于某种系统簿记?
(例如,1 个额外的位将为安全地添加两个有效的散列地址提供空间而不会溢出)。
最后,这个选择是voldemort特有的,还是在其他一致的哈希方案中看到的?
python - Voldemort Python 客户端问题
我在让 Python 客户端连接到我使用 voldemort 设置的多个服务器时遇到问题。我正在使用 Python 2.6.1 和 Voldemort 0.81。具体来说,如果我有一个双节点集群,连接到第一台服务器似乎没有任何问题,但连接到第二台服务器时可能会出现大问题。这是我正在使用的配置设置(以防这导致一些问题):
我也遇到了值被 json 编码并且持久性只是在内存中的问题,所以我不相信问题就在那里。我已经尝试过将两台机器放在同一个机架中(它们之间的通信很简单),并且在不同的机架中(仍然应该非常快,但不是直接连接)。这是我在 Python 中得到的:
如果我在运行服务器“0”的机器上并且如果我在运行服务器“1”的机器上,我会得到相同的结果。我什至尝试从一个客户端 ala 连接到两台服务器:
这偶尔会起作用(尽管它可能会在测试过程中出错),但偶尔会失败并出现类似于“WARNING:root:Metadata bootstrap from 1:6666 failed: Invalid Argument”的警告,同时仍然给我一个客户端对象。
有关如何解决此问题的任何建议?我通常喜欢我见过的单节点集群性能,并希望扩展到多个节点。
java - 如何从伏地魔商店一次获取所有键值对?
现在如何一次从存储中获取所有键值对?
replication - Voldemort 复制和故障转移详细信息
我正在评估 Voldemort,遇到了一些与复制和故障转移相关的令人困惑的事情。我尝试制作一个简单的 2 节点集群配置,其中每个节点都是另一个节点的备份。因此,写入节点 1 的数据应复制到节点 2,反之亦然。在节点 1 故障转移的情况下,第二个节点应服务于客户端请求。节点 1 恢复后数据应该被传输回节点 1。我认为这是非常常见和明确的情况。所以我做了以下配置。
我执行以下测试:
- 启动两个节点;
- 使用 'bin/voldemort-shell.sh perftest tcp://10.50.3.156:6666' 通过 shell 连接集群;
- 把键值“1”“a”;
- 执行 'preflist "1"' 返回我的 'Node 1' 'Node 0' 所以我假设 'get' 请求将首先发送到节点 1;
- 崩溃节点 1;
- 获取密钥“1”。我看到一些与连接丢失有关的错误,但最终它返回了正确的值;
- 启动节点 1;
- 获取密钥“1”。它说节点 1 可用,但返回“null”而不是值。所以我假设节点 1 没有从节点 0 获取数据,并且由于我的 required-reads = 1 它不要求节点 0 并返回 null。
- 崩溃节点 0;
- 密钥“1”永远丢失,因为它没有复制到节点 1。
我非常确定我误解了配置或集群复制详细信息中的某些内容。您能否解释一下为什么恢复后数据不会从节点 0 复制回节点 1?复制是客户的责任,而不是服务器的责任,我说得对吗?如果是这样,节点恢复后应该如何复制数据?
提前致谢。
dictionary - 如何为键/值存储设计/创建键?
我想将序列化对象(或其他)存储在键/值缓存中。
现在我做这样的事情:
我认为这可能很尴尬。如何设计钥匙?
mongodb - 寻找支持 CAS 的 CA 键值存储
我正在寻找一种支持一致性、可用性和比较和设置的持久键值存储。
它将部署在三个节点上,并且必须在一个(任何)节点关闭时可操作。如果整个集群离线(例如由于电源问题)然后又重新在线,它不应该丢失任何数据。此外,我希望系统不会打扰系统管理员,除非两个节点已关闭。当然,希望尽可能快。最重要的特性是一致性:如果报告保存了某些内容,则它不会因失败而丢失。
我探索了 MongoDB 的文档,在一些罕见的情况下它需要手动干预,但这不是可选的。
我查看的另一个系统是伏地魔。我假设它通过以下设置满足我的要求:
但它没有提供关于复制和一致性的全面文档,所以我无法验证我的假设。
您是否有适合我要求的存储体验?你能给我推荐点什么吗?
PS我不打算存储大量信息,因此可以省略分片。
java - 如何从 JUnit 内部使用 Voldemort 服务器?
我正在尝试在 Maven 项目中从 JUnit 内部使用 Voldemort。当以下代码编译时,它没有成功执行:
相反,会引发此异常:
知道如何解决这个问题吗?
java - 运行 Voldemort 应用程序
我一直未能运行使用 Voldemort 的 Java 应用程序。我正在尝试运行可以通过 Voldemort 下载找到的客户端示例。
我编译代码如下:javac -classpath voldemort-0.96.jar ClientExample.java
没有出现错误。但是当我尝试按如下方式运行代码时:java -classpath voldemort-0.96.jar ClientExample
我收到以下错误消息:
我不确定我做错了什么。伏地魔罐子在同一个文件夹中。
编辑:这是 ClientExample 代码
memcached - 决定合适的键值存储:Voldemort vs Cassandra vs Memcached vs Redis
我正在为我的一个项目(医疗保健语义搜索引擎)使用三重存储数据库,它工作得很好。我正在考虑通过在三重存储之上使用一层键值存储来提高性能。三重存储查询速度较慢,因为我们进行了深度语义处理。
这就是我计划提高性能的方式:
1) 每天通过查询三重存储为所有查询词运行 Hadoop 作业。2) 将这些结果缓存在集群中的键值存储中。3)当用户搜索查询词时,将首先搜索键值存储,而不是搜索三重存储。只有在键值存储中找不到查询词时才会搜索三重存储。
我计划保存的键值对是“字符串”到“POJO 映射列表”。我可以将其保存为 BLOB。
我对使用哪个键值存储感到困惑。我主要寻找故障转移和负载平衡支持。我所需要的只是一个提供上述功能的简单键值存储。我不需要在值或任何其他功能中进行排序/搜索。
如果我错了,请纠正我。我假设 memcached 和 Redis 会更快,因为它在内存中。但是我不知道 Redis(Jredis) 或 memchaced(Spymemcached) 的 Java 客户端是否支持故障转移。我不确定是使用内存还是持久存储。我也在考虑 Voldemort、Cassandra 和 HBase。总体密钥值将在 2GB 到 4GB 左右。对此的任何指示都会非常有帮助。
我对 nosql 和键值存储非常陌生。如果您需要更多详细信息,请告诉我。