我正在评估什么可能是最好的迁移选项。

目前,我使用的是一个分片MySQL(水平分区),我的大部分数据存储在JSON blobs中。我没有任何复杂的SQL查询(已经迁移了,因为我分区了我的db)。

现在,似乎MongoDB和Cassandra都是可能的选择。我的情况:

在每个查询中都有大量的读取,较少的常规写入 不担心“大规模”的可伸缩性 更关心简单的设置、维护和代码 最小化硬件/服务器成本


当前回答

为什么要在传统数据库和NoSQL数据存储之间进行选择?同时使用!NoSQL解决方案的问题(超出了最初的学习曲线)是缺乏事务——你对MySQL进行所有更新,并让MySQL填充一个NoSQL数据存储进行读取——然后你从每种技术的优势中受益。这确实增加了更多的复杂性,但您已经有了MySQL方面——只需将MongoDB、Cassandra等添加到混合中。

在相同规格的情况下,NoSQL数据存储通常比传统数据库的扩展性更好——这就是为什么Facebook、Twitter、谷歌和大多数初创企业都在使用NoSQL解决方案的原因。不仅仅是极客们在新科技上兴奋。

其他回答

为什么要在传统数据库和NoSQL数据存储之间进行选择?同时使用!NoSQL解决方案的问题(超出了最初的学习曲线)是缺乏事务——你对MySQL进行所有更新,并让MySQL填充一个NoSQL数据存储进行读取——然后你从每种技术的优势中受益。这确实增加了更多的复杂性,但您已经有了MySQL方面——只需将MongoDB、Cassandra等添加到混合中。

在相同规格的情况下,NoSQL数据存储通常比传统数据库的扩展性更好——这就是为什么Facebook、Twitter、谷歌和大多数初创企业都在使用NoSQL解决方案的原因。不仅仅是极客们在新科技上兴奋。

我没有用过Cassandra,但是我用过MongoDB,我觉得它很棒。

如果你想要简单的设置,这就是它:你只需untar MongoDB并运行mongod守护进程,这就是它…它是运行。

显然,这只是一个开始,但要让你开始很容易。

我广泛地使用MongoDB(在过去的6个月里),构建了一个分层的数据管理系统,我可以保证安装的简易性(安装、运行、使用!)和速度。只要您仔细考虑索引,它绝对可以在速度方面快速运行。

我收集到Cassandra,由于它被用于像Twitter这样的大型项目,有更好的扩展功能,尽管MongoDB团队正在那里进行对等工作。我应该指出的是,我在试运行阶段之后就没有使用过Cassandra,所以我不能透露细节。

对我来说,当我们评估NoSQL数据库时,真正的摇摆是查询——Cassandra基本上只是一个巨大的键/值存储,查询有点繁琐(至少与MongoDB相比),所以为了性能,你必须复制相当多的数据作为一种手动索引。另一方面,MongoDB使用“按示例查询”模型。

例如,假设您有一个包含Users的Collection (MongoDB中相当于RDMS表的说法)。MongoDB将记录存储为文档,基本上是二进制JSON对象。例句:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

如果你想找到所有名为Smith的拥有Admin权限的用户,你只需要创建一个新文档(在管理控制台使用Javascript,或者在生产环境中使用你选择的语言):

{
   LastName: "Smith",
   Groups: "Admin"
}

...然后运行查询。就是这样。还添加了用于比较、RegEx过滤等操作符,但都非常简单,基于wiki的文档也非常好。

我可能会成为一个奇怪的人,但我认为你需要继续使用MySQL。你没有描述你需要解决的真正问题,MySQL/InnoDB是一个优秀的存储后端,即使是blob/json数据。

在Web工程师中有一个常见的技巧,即在意识到RDBMS并没有使用所有特性时尝试使用更多的NoSQL。这本身并不是一个好的理由,因为大多数情况下NoSQL数据库的数据引擎(MySQL称之为存储引擎)相当差。

现在,如果你不是这样的人,那么请说明MySQL中缺少什么,你正在寻找一个不同的数据库(比如,自动分片,自动故障转移,多主复制,集群中较弱的数据一致性保证,以更高的写吞吐量,等等)。

昨天我看了一个关于mongodb的报告。我可以肯定地说,这个设置很“简单”,就像打开并启动它一样简单。完成了。

我相信mongodb和cassandra几乎可以在任何常规的linux硬件上运行,所以在这方面你不应该发现太多的障碍。

I think in this case, at the end of the day, it will come down to which do you personally feel more comfortable with and which has a toolset that you prefer. As far as the presentation on mongodb, the presenter indicated that the toolset for mongodb was pretty light and that there werent many (they said any really) tools similar to whats available for MySQL. This was of course their experience so YMMV. One thing that I did like about mongodb was that there seemed to be lots of language support for it (Python, and .NET being the two that I primarily use).

使用mongodb的站点列表非常令人印象深刻,我知道twitter刚刚改用cassandra。