我正在考虑构建一个使用Cassandra作为其数据存储的应用程序,但具有低延迟要求。我知道来自this blog post
的EmbeddedCassandraService
以下实施是否可行以及已知的缺陷(缺陷,功能限制)?
1)将Cassandra作为嵌入式服务运行,将数据保存到磁盘(持久)。
2)Java应用程序通过以下之一与本地嵌入式服务进行交互。什么是专业人士
TMemoryBuffer
(或更合适的东西?)StorageProxy
(使用此API的缺陷是什么?)3)Java应用程序通过Thrift(或Avro?)与远程Cassandra服务(“备份”节点)进行交互。
4)写入必须始终成功到本地嵌入式Cassandra服务才能获得成功,并且至少有一个远程(非嵌入式)Cassandra节点。这可能吗?是否可以定义自定义/复杂一致性级别?
5)附带问题: Cassandra:权威指南在几个地方提到Thrift最终会被Avro取代,但似乎现在还不是这样吗?
正如您可能猜到的,我是Cassandra的新手,所以对特定文档页面(不是wiki主页)或示例项目的任何指示都表示赞赏。
答案 0 :(得分:1)
除非您的整个数据库都位于本地计算机上(即单个节点),否则此配置无法获得任何结果。 Cassandra会在整个集群中对您的数据进行分片,因此(如其中一条评论中所述)您的写入将经常发送到拥有该数据的另一个节点。假设您使用至少为1的一致性级别进行编写,则您的调用将阻塞,直到该另一个节点执行写入操作。这无视与嵌入式实例通信的任何好处,因为无论如何你都有一些网络延迟。