基于磁盘的基于文档的存储

Posted

技术标签:

【中文标题】基于磁盘的基于文档的存储【英文标题】:Disk based document based storage 【发布时间】:2012-02-25 09:34:17 【问题描述】:

网络上有免费的基于磁盘的高度可扩展的 NoSQL 存储系统吗? SQL Server 的好处是它可以扩展,但是将我的项目迁移到 SQL 表中是一场噩梦,因为它都是对象?

选项包括: 1.从内存中运行 2.序列化文档 3.转成SQL 4. 使用大型 NoSQL 数据存储

【问题讨论】:

大多数 NoSQL 都是基于磁盘的。像 Azure 表存储,非常好。但是,没有免费的 我不认为有免费的可以让你存储大量数据(我记得S3可能会免费存储少量数据),也许你可以使用像DropBox这样的文件托管服务,然后在SQL Server中索引你的键 “SQL Server 的优点在于它可以扩展”——真的吗?!事实上恰恰相反。 “NOSQL 的好处在于它可以扩展”,看起来 OP 打错了 【参考方案1】:

MongoDB 是基于磁盘的,但它当然会受益于(大量)内存。它是开源和免费的,它使用分片和复制从一台机器扩展到数千台机器。

您可以download it 并在本地运行它,也可以使用free hosted solutions 之一。

【讨论】:

【参考方案2】:

在过去的几周里,我一直在处理同样的问题;这是我的观察:

    SQL Server 可以工作,但不能很好地扩展。我们测试了一个包含大约 600GB 文档的 SQL Server 数据库,我们可以说事情变得非常缓慢。 对于 mysql 来说或多或少是相同的……两者都不是为文档而设计的…… Hadoop/HDFS 在 Windows 上似乎并不成熟。虽然 Microsoft 有可用的 HDFS 实现,但它仍处于 RC 阶段。从积极的方面来说,如果您正在为未来开发(假设生产 1 年),这似乎是一个不错的选择。 Apache Cassandra 似乎成熟了。从积极的方面来说,实现非常简单;也就是说:它基本上只是一个带有一个分区器的普通分布式键值存储,其中键和值都是一个字节[]。但是,实现的简单性也意味着您需要解决各种问题。如果您使用过它,您就会知道如果您需要实现 Twitter,它非常棒,但对于其他任何事情来说都太简单了。它可以很好地扩展,但老实说,我对性能并没有太大印象。此外,我遇到了一些数据不一致/损坏,这并没有真正温暖我的心......如果你使用 Cassandra,我个人会使用 Aquiles 作为客户端(因为你会很容易遇到低级的东西) - 但 FluentCassandra 也是一个很好的客户。 MongoDB 也相当成熟。从积极的方面来说,它是活跃的,并且有一个非常好的和易于使用的(不像 Cassandra)C# 客户端库。此外,虽然分片服务器在我的集群上崩溃了几次,但恢复总是成功的(而且我对重启不太礼貌:-)而且我遇到的所有问题似乎已经在开发分支中解决了 -所以我对此并不感到不舒服。 MongoDB 拥有而 Cassandra 缺乏的最重要的东西是对二级索引的支持。

所有这些解决方案都是基于磁盘的(例如磁盘上的持久性)。

我查看了 3-5 的代码,并在过去(大约 6 年前)实现了我自己的 NoSQL 解决方案,过去几年我们一直在使用该解决方案进行数据存储。老实说,MongoDB 是我自己实现它的方式。

为了完整性:我唯一还没有尝试过的是 CouchDB...但坦率地说,我对 MongoDB 非常满意,我什至不会打扰。

-斯特凡。

【讨论】:

【参考方案3】:

开源许可证(GPL 或 Apache)提供了许多 NoSQL 选项。在搜索时,我遇到了这个listing,它提供了一些选项的功能比较。

如果您必须拥有受支持的 C# 客户端,那么您会受到一些限制,但我会研究 MongoDB 和 Redis,因为我过去曾使用过它们并取得了不错的效果。

【讨论】:

以上是关于基于磁盘的基于文档的存储的主要内容,如果未能解决你的问题,请参考以下文章

KVM虚拟机存储管理

需要基于磁盘的优先级队列库,最好用于 C

MapDB使用入门

Elasticsearch 基于磁盘的shard分配机制浅析

基于磁盘的Kafka为什么这么快

基于NFS共享存储kvm虚拟机动态迁移操作梳理