类似Dynamo的数据库(例如Cassandra)可以通过仲裁来强制执行一致性,即一些同步写入的副本(W)和一些要读取的副本(R)应该以W + R> N的方式选择N是复制因子.另一方面,像Zookeeper这样的基于PAXOS的系统也被用作一致的容错存储.
这两种方法有什么区别?PAXOS是否提供W + R> N架构未提供的保证?
在不锁定整个集合的情况下,防止在键值集中并发更新一个记录的最佳方法是什么?从语义上讲,我正在寻找某种键的锁定(理想情况下,Java实现,但不一定):
interface LockByKey {
void lock(String key); // acquire an exclusive lock for a key
void unlock(String key); // release lock for a key
}
Run Code Online (Sandbox Code Playgroud)
此锁用于同步对远程存储的访问,因此某些同步Java集合不是一个选项.
我们正在开发具有以下属性的SSD支持的键值解决方案:
我们在商用SSD上尝试了KyotoCabinet,LevelDB和RethinkDB,使用不同的Linux IO调度程序,ext3/xfs文件系统; 使用Rebench进行了多次测试; 并发现在所有情况下:
下图说明了KyotoCabinet的这种行为(横轴是时间,三个周期清晰可见 - 只读,混合,仅更新).
问题是:是否可以使用SSD实现所描述的SLA的低延迟以及建议使用哪些键值存储?

我正在研究一个客户端 - 服务器对,其中多线程客户端每秒执行数千次服务器调用,第一优先级是实现最小延迟.吞吐量也应该很高.客户端和服务器都是用Java编写的,通信语义非常简单(put/get操作).
什么是满足这些要求的最佳Java网络库/框架?像Tomacat/Jetty这样的服务器似乎是重量级的.我正在考虑MINA或Netty,但我不确定这些异步库是否会在繁重的工作负载下提供稳定的低延迟.