.NET中有哪些NoSQL解决scheme?

.NET中有哪些NoSQL解决scheme?

你也应该考虑使用Redis 。 这是一个先进的NoSQL数据库,支持丰富的服务器端数据结构,如列表,集合,sorting集合和哈希。 它在内存中运行,但同时支持“快照”持久性模式以及“仅追加文件日志”以实现快照之间的完整性。

Redis速度非常快

它也是现有速度最快的NoSQL数据库之一:入门级Linux机箱中每秒钟110000次/秒,81000次/秒。 检查基准 。

为了保持对Redis的忠诚,我开发了一个非常快速的C#Redis客户端,强调性能。 运行Raven DB自己的基准 ,默认的redis-serverconfiguration比Raven DB快16.9倍。 当调整为使用appendfsync always选项(尽pipe不推荐),它仍然快11.75倍

@marcgravell开发了一个非常快速的asynchronousC#Redis客户端,用于处理堆栈溢出和其他堆栈交换站点分布式caching。

简单而优雅

与大多数NoSQL数据存储一样,Redis无模式允许您直接使用它,而无需事先定义任何模式,从而大大提高生产力。 Redis的美妙之处就在于它像访问C#中习惯的.NETgenerics集合类,所以只需要很less的投影,因为它的API已经与List和内存中的数据结构紧密匹配程序已经使用。

正是这种提供基本的comp-sci数据结构的优点使得Redis具有了独特的优势,它使得它非常灵活,同时只支持有限的操作集。 即Redis通常被看作是分布式caching,消息队列,语言/进程之间的IPC代理,Pub / Sub,推/基于事件的通信,分布式locking,CQRS事件源,唯一ID生成器等。不要使用它作为你的主要数据存储,它的速度和简单性使你能够访问一个多function的瑞士军队工具箱,可以满足大量的使用情况。

全function的Redis客户端

有许多C#/ .net Redis客户端可用,并在NuGet上 。 下面的例子使用我的ServiceStack的开源C#客户端 。

ServiceStack的C#Redis客户端的所有文档和教程可在以下urlfind: http : //www.servicestack.net/docs/redis-client/redis-client

客户端提供丰富的接口,为.NET的genericsIList,IDictionary和ICollection映射提供了Redis丰富的服务器端数据结构的封装。 要快速了解其function, 请查看API图像映射 。

展示如何开发真实世界的应用程序的一个很好的教程是: http : //www.servicestack.net/docs/redis-client/designing-nosql-database

查看Redis StackOverflow的源代码 ,以查看完全由Redis构build的真实应用程序的另一个示例。

示例代码显示完整的CRUD应用程序:

 public class Todo { public long Id { get; set; } public string Content { get; set; } public int Order { get; set; } public bool Done { get; set; } } //Thread-safe client factory var redisManager = new PooledRedisClientManager("localhost:6379"); redisManager.ExecAs<Todo>(redisTodos => { var todo = new Todo { Id = redisTodos.GetNextSequence(), Content = "Learn Redis", Order = 1, }; redisTodos.Store(todo); Todo savedTodo = redisTodos.GetById(todo.Id); savedTodo.Done = true; redisTodos.Store(savedTodo); redisTodos.DeleteById(savedTodo.Id); var allTodos = redisTodos.GetAll(); Assert.That(allTodos.Count, Is.EqualTo(0)); }); 

现场看这个例子,看看ServiceStack的Backbone的TODO应用程序 ,它是一个C#Redis后端 。

在所有语言和平台上运行

由于其简单性,它几乎可以用于今天使用的所有语言的语言绑定: http : //redis.io/clients

在dynamic语言中它更加简洁,在node.js / CoffeeScript中创build托pipe命名计数器的非阻塞Web服务器是多么容易:

 app.get '/counters/:id', (request, response) -> id = request.params.id redis.incr id, (err, val) -> response.send "#{id}: #{val}", 'Content-Type': 'text/plain', 201 

NoSQL的好处之一就是可以与来自不同语言背景的开发人员混合在一起,共同研究如何最好地利用redis来满足我们苛刻的需求。

广泛使用的最大的公司

由于其简单性,稳定性和速度,它被许多大公司所使用,包括:

  • 堆栈溢出
  • GitHub上
  • 推特
  • 暴风雪
  • Flickr的
  • 掘客
  • Instagram的

下载Redis for Windows

我在https://github.com/mythz/redis-windows上提供了在Windows上运行Redis的两种最stream行的方法的安装说明和下载,其中显示了如何:;

  1. 使用Vagrant在VirtualBox VM中运行Redis的最新稳定版本。
  2. 下载并运行Redis的微软本地端口

你没有说明你的需求是什么(即必须在Windows上运行),所以我会抛出我已经成功使用的2。

MongoDB是一个文档数据库,具有32位和64位Windows预构build的二进制文件。 这总是很好的事情。

客户端访问可以用这个驱动程序完成。 它不是MongoDB团队的官方客户端,但我已经使用它。 在我的使用中,它支持我所需要的。 回购中有一些LINQ的东西 ,但我没有尝试过。

 // from the wiki using MongoDB.Driver; Mongo db = new Mongo(); db.Connect(); //Connect to localhost on the default port. Document query = new Document(); query["field1"] = 10; Document result = db["tests"]["reads"].FindOne(query); db.Disconnect(); 

我能够在Windows上运行客户端和服务器,没有任何问题。

CouchDB也是一个选项。 有一些本地的.NET客户端,但所有的CouchDB都是用REST完成的。 所以HttpWebRequest / Response将在这里很好地为您服务。 Rinat Abdullin的一篇博客文章展示了一些片段如何组合在一起。 还有CouchBrowse 。 我从来没有使用过本地客户端。 GET / PUT / POST对我来说工作得非常好。

我得到了CouchDB在Windows上工作(它是用Erlang编写的),但是我的性能testing显示Linux比较快。 我的猜测可能是Erlang本身如何实现? 我不知道。 但它可以在Windows和Linux上运行。 我可以很容易地从Windows调用Linux实例(这只是REST)。

下一个我从来没有尝试过,但我有一个朋友是HBase项目的提交者。 他认为HBase的Thrift接口应该可以从.NET使用(因为Thrift将生成C#)。 这里最重要的事情是Hadoop / HBase更侧重于* nix环境。 但是,没有理由不能在Linux集群上运行HBase,并从Windows上的.NET连接到生产环境。 对于开发,您可以使用Cygwin在Windows上运行HBase。 关于如何做到这一点的一个很好的指示是在这里 。

还有其他人(Valdemort,Cassandra等),但我没有真正的经验,所以我不会假装说他们如何与C#/。NET整合。 要看的大事是他们的API看起来像 – 如果它有一个Thrift接口,REST等,你应该能够连接到他们没有问题。 您可能无法像Windows一样有效地在Windows操作系统上运行NoSQL服务,但也许这不是什么大问题。

编辑改变了,有一些本地的CouchDB客户端。 我不熟悉他们,因为我总是使用原始的HTTP和我自己的小包装类。

Ayende只是在.net上写一个,叫做RavenDB

看看他的Git仓库:
http://github.com/ravendb/ravendb

…和他的博客条目:
http://ayende.com/blog/tags/raven

编辑:
现在完成了。 你可以在http://ravendb.net/查看。;

Ayende的RavenDB是基于.NET的后端和客户端NoSQL(特别是文档数据库)。 来源是免费的。 性能与MongoDB相当(最后的testing是每秒6000张左右)。 索引是使用LINQ以非常聪明的方式完成的。 REST界面,Web UI。 实际上非常非常聪明。

RavenDB可以在IIS中或通过控制台(exe)作为服务运行。 它需要.NET 4用于服务器端。

客户端可以是.NET 3.5。 事实上,我相信客户将在单声道运行。

http://groups.google.com/group/ravendb/web – 所有的文件

我去启动活动,添加了惊人的function,还有更多的东西来。 大家都被乌鸦吹走了,所以这绝对是值得一看的。

我一直在使用BrightstarDB进行最新的项目。 这是一个完整的entity framework的本地.NET NoSQL(这使得从第一次下载开始运行应用程序只需要几分钟的时间)。

我首先尝试了RavenDB ,但是虽然安装所有的MapReduce都非常简单,但是索引build立的东西花了很长时间才让我头脑发热 ,而且每当我想要在两个方向上的“事物”之间导航关系的时候,它都很慢,笨拙。

BrightstarDB在开发方面非常出色,它与第一个entity framework非常相似,但是没有数据库设置的麻烦,而且我可以对我的数据模型进行大量的修改,而不必担心必须使用SQL。

绝对值得一看!

看看db4o 。 它基于对象,简单,自包含(如sqlite3)与LINQ和它的开源。

如果你想让轻量级的数据库引擎能够很好地运行.NET并且支持LINQ,你可以试试Eloquera,STSdb和Siaqodb。
在我的博客上看到这篇文章 ,以了解他们提供什么。

微软即将在 2011年底发布SQL Azure上的“NoSQL”解决scheme。

它基于新的联合function ,并将XML用于半结构化存储 。

[编辑]在downvoting之前, 阅读说明如何使用SQL Azure中具有明显完美的.NET / C#/ LINQ集成的“NoSQL”特性的文章

你可以使用着名的Cassandra数据库。 它也使用节俭接口。

Lucene.net项目将适合您的一般要求。 它提供了一个用于存储和索引文档的API,将数据库存储在文件系统上。

该项目主要是一个全文search库,最初用Java编写,后来移植到.NET。 因此,它没有Linq的支持,但是已经非常成熟,相当成熟的一个项目。

一个不利的方面可能是项目的复杂性,这听起来像是在寻找即插即用的解决scheme,但是Lucene项目要求您花一点时间来理解全文索引和search的细节。

但是一个主要优点是Lucene库的性能非常快,尤其是对于大型数据集的并发search,所以对于运行独立网站而言,无需运行数据库服务器也是一个很好的解决scheme。

RavenDB具有最好的.NET / LINQ支持。 使用NuGet获取.NET客户端非常容易; 一个Visual Studio在线扩展pipe理器(类似于苹果的App Store)。

如果开发工具对你来说比对性能更重要,你应该考虑RavenDB。

db4o很棒,但要注意它有一个开源的版本,但它不是免费的商业用途。

另一种select是MemcacheDB 。

它基于Memcache,但增加了持久性存储。 这是他们的事情:

MemcacheDB是一个分布式键值存储系统,专为持久性而devise。 它不是一个caching解决scheme,而是一个持久的存储引擎,用于快速可靠的基于键值的对象存储和检索。 它符合memcache协议(未完成,见下文),所以任何memcached客户端都可以与它连接。 MemcacheDB使用Berkeley DB作为存储后端,因此支持许多function,包括事务和复制。

亚马逊提供了一个.NET SDK,用于连接到它的SimpleDB(以及AWS系列服务的其他部分)。

http://aws.amazon.com/simpledb/

http://aws.amazon.com/sdkfornet/

最好的部分是:云中的免费层(截至目前:“新老客户每月可免费获得25个SimpleDB机器时间和1GB存储空间。”)