Cassandra客户端API与App Engine Datastore API最相似的是哪一个?

7
随着谷歌应用引擎新定价模式的公布,我意识到由于Google Datastore交互的价格过高,我的应用程序将无法自行维持。因为这是一个依赖于连续和快速用户输入的社交游戏,所以每个用户基础上需要太多的数据存储交互才能实现(即使使用memcache调解常见查询和操作)。
从我所做的研究来看,最好的解决方案似乎是让我的团队迁移到基于Cassandra的数据库解决方案。我已经看过了各种受欢迎的API,如Hector和Pelops,但从我的初步检查中,它们似乎对我要寻找的内容有点太低级了。在Java中是否有一个Cassandra客户端API,可以模拟App Engine的低级Datastore API并使用相同的“实体组”/属性模型?至少我希望该API具有相同的“祖先”实体概念,并以相同的方式维护跨组事务。
编辑:为了澄清,我真正想要的是支持事务的Cassandra API。据我所知,在NoSQL环境中实现事务是困难的,如果没有一些“对象”的分层分组(称之为实体、表等),甚至是不可能的。这似乎是Hector没有实现它们的原因。
所以,我的问题是,最受欢迎的Cassandra API是哪一个,它实现了某种形式的事务系统,最好使用类似GAE的实体结构?

这并不是直接回答你的问题,但似乎一个有益的方法是设计一个数据存储需求的抽象。将其视为一个内部 API,旨在隐藏GAE和Cassandra(以及可能的AWS)之间的区别。你可能会发现,实现Cassandra版本并不那么困难,或者它为你提供了改变数据存储方式的灵活性。 - RichW
@RichW 是的,那正是我们目前采取的方法。我们正在创建一组与 GAE 的特定数据存储调用无关的接口,并将所有与数据存储的交互移到该接口的实现中。尽管这是一项巨大的任务,但我们确实不想在此阶段执行它,因此我想知道哪个 Cassandra API 最相似,以便我可以研究它并确保我们正在重新设计的架构一旦进行必然的转换后不需要太多修改。 - Eternal Rubyist
如果我有那种类型的应用程序,我会研究GAE Channel API。我的应用程序规模较小到中等,虽然新的定价方式让我支付了20倍的费用,但它仍然只是专用服务器或物理托管成本的一小部分,因为我只使用非常标准的HTTP get和/或post。我听说过Channel API,我认为它可以完成这些类型的交互,如果我错了,请原谅,这只是我根据所读内容猜测的。 - Niklas Rosencrantz
@Nicke,频道API并不能改变用户发送/接收的数据需要在某个地方持久化的事实。Memcache API实际上可以减轻我们众多的“刷新”Datastore操作,但由于存储在那里的所有数据都是瞬态的,因此任何“更新”的数据仍然需要始终如一地发送到Datastore。 - Eternal Rubyist
2个回答

1

Hector似乎是Java中最受欢迎的Cassandra API,但据我所知,它没有支持/计划将其对象映射分组为“实体组”的功能。就我所了解的而言,在没有分组对象的情况下,在NoSQL数据库中实现事务系统是困难的(如果不是不可能的)。也许我应该稍微澄清一下我的问题,以解释我真正寻找的是支持事务的Cassandra API。 - Eternal Rubyist
3
一旦它们可用,我们会立即支持它们 :-) - zznate
1
此外,关于分布式系统中的“实体组”和事务的一些原始研究,请参见:http://research.google.com/pubs/archive/36971.pdf(“megastore”论文和Pat Helland的“超越分布式事务的生活”:www.ics.uci.edu/~cs223/papers/cidr07p15.pdf)。 - zznate
哇,太棒了!那个增强请求正是我正在寻找的! - Eternal Rubyist
我将自己添加到了观察名单中,并且将开始(漫长的)自我教育过程,以期望有所贡献。 - Eternal Rubyist
很好 - 如果还有其他需要帮忙的地方,请告诉我。 - zznate

0
我能找到的最好的选择是AppScale,它使用Cassandra,但我不清楚如何设置和运行Datastore作为独立服务而不包括其他GAE服务。我已经为此创建了一个问题。从技术上讲,你可以使用相同的客户端库进行微小的调整(例如,用你自己的URL/终端替换数据存储URL/终端)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接