2009-09-15 58 views
4

有没有人使用memcached作为level2缓存或lucene.net与nhibernate搜索?你可以请你分享你的进步nhibernate缓存&索引/搜索。memcached或lucene.net与nhibernate

而且,memcached(在appserver的同一台机器上拥有enyim cilent)是nhibernate最快的l2cache解决方案吗?

问候 sirmak

+0

只是出于好奇,你想解决什么问题? – Kane 2009-09-15 10:22:01

+0

嗨, 我只是试图找出最佳的缓存和索引/搜索解决方案使用nhibernate。 – sirmak 2009-09-15 11:41:43

回答

3

我已经使用了实验。 对于二级缓存,我无法将其与任何其他选项进行比较,因为它是我使用的唯一一个,除了可能没有一个:它会立即提供性能提升,但它们对于场景会更明显在处理大型数据集和处理群集时,您通常阅读的内容大于插入/更新。特别是为memcached提供了一个完善的解决方案,因为应用程序可以在任何类型的机器上虚拟运行(例如廉价的Linux机器)

对于Lucene.NET,我已经使用了它两个香草(但没有nhibernate,但生产不仅仅是实验)和NHibernate.Search的形式,而与nhibernate的集成是无缝的:索引是在窗帘后面生成和操作的,一切都在Class声明中配置(不幸的是,使用类和属性属性,映射)。与Sql-Server的全文搜索引擎相比,我认为它更易于维护,因为您不必使用FT引擎编写普通的SQL来获取,您只需使用Criteria机制以及Lucene查询的公开机制。

在更新/插入/删除期间自动完成与数据库的同步。 Lucene.NET引擎的性能取决于机器的cpu/ram配置以及存储介质的速度,如果不比SqlServer的FullText引擎快,我发现它的可比性。需要注意的是,NHibernate.Search索引很简单,每个索引类都有自己的索引文件,可以更容易地在索引中进行开发和查看。

2

我们已经使用Lucene.NET成功改善几个GB的大型数据库的搜索性能。然后将Lucene.NET结果ID传递给NHibernate进行提取。 NHibernate查询会超时,但Lucene.NET会在几秒钟内返回结果。我们还没有使用Memcached,所以我无法比较这两种解决方案。

最大的缺点是Lucene索引必须与实际数据库保持同步。

编辑:你可能想看的一件事是NHibernate.Search,如果你打算去NHcene路由,它是一个为你处理Lucene索引创建&同步的项目。它有一些很好的功能,上次我检查它为每个类创建索引,自动索引所有属性。这对我们没有用处,因为我们也想索引被引用的对象,但是在某些情况下,这应该足够了。不知道现在项目在哪个状态,自从我看了一段时间后,这已经有一段时间了。

+0

非常感谢 – sirmak 2009-09-15 12:36:30