The*_*uad 7 erlang hbase cassandra nosql riak
还有一个关于NoSQL选择的问题.但是,我还没有找到有人要求这种目的,消息存储......
我有一个Erlang聊天服务器,我已经使用MySQL存储好友列表,以及"JOIN needed"信息.
我想存储消息(用户因为离线而没有收到消息......)并检索它们.
我已经预先选择了NoSQL,我不能使用像MongoDB这样的东西,因为它是面向RAM的范例,并且不能像其他人一样集群.我想我的列表中有3个选项:
我知道他们的模型不同,一个使用键/值,另一个使用SuperColumns和co.
到目前为止,由于它是Erlang的稳定客户端库,我对Riak有偏好.
我知道我可以使用Cassandra和Thrift,但是对于Erlang来说似乎不太稳定(我没有得到很好的回报)
我现在对HBase一无所知,只知道它存在并且基于像Cassandra和Riak这样的Dynamo.
所以这就是我需要做的事情:
现在,我对那些NoSQL DB真的很陌生,我一直都是MySQL爱好者,这就是为什么我问你这个问题,作为一个新手,会有比我更多经验的人帮我选择哪一个更好,并且会让我做我想做的一切,不用太麻烦......
谢谢 !
我不能代表Cassandra或Hbase,但让我谈谈Riak部分.
是的,Riak适合您的场景(我看到有几家公司和社交网络将其用于类似目的).
要实现这一点,您需要简单的Riak Key/Value操作,以及某种索引引擎.您的选择(按优先顺序排列):
CRDT集.如果你的1-N集合大小合理(比方说,每个用户少于50条消息或其他),你可以将子集合的密钥存储在CRDT集数据类型中.
Riak搜索.如果您的集合大小很大,特别是如果您需要在任意字段上搜索对象,则可以使用Riak Search.它在后台旋转Apache Solr,并根据您定义的模式索引对象.它具有非常棒的搜索,聚合和统计,地理空间功能等.
二级索引.您可以在eLevelDB存储后端上运行Riak ,并启用辅助索引(2i)功能.
运行一些性能测试,选择最快的方法.
就架构而言,我建议使用两个桶(用于您描述的设置):用户存储桶和消息存储桶.
索引消息桶.(通过将搜索索引与其关联,或通过2i存储user_key).这使您可以执行所有必需的操作(并且消息日志不必适合内存):
multiFetch功能,客户端-侧).