【问题标题】:memcached or lucene.net with nhibernate带有 nhibernate 的 memcached 或 lucene.net
【发布时间】:2009-09-15 10:11:49
【问题描述】:

有没有人使用 memcached 作为二级缓存或 lucene.net 来使用 nhibernate 进行搜索?您能否分享您在休眠缓存和索引/搜索方面的进展。

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

最好的问候 西马克

【问题讨论】:

  • 只是出于好奇,您想解决什么问题?
  • 嗨,我只是想找出与 nhibernate 一起使用的最佳缓存和索引/搜索解决方案。

标签: .net nhibernate memcached lucene.net


【解决方案1】:

我都在实验中使用过。 对于二级缓存,我无法将其与任何其他选项进行比较,因为它是我唯一使用的选项,除了可能没有:它将立即提供性能提升,但在以下情况下它们会更加明显在处理大型数据集和拥有集群时,您主要阅读而不是插入/更新。特别是对于 memcached,它是一个不错的解决方案,因为该应用程序几乎可以在任何类型的机器上运行(比如便宜的 Linux 机器)

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

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

【讨论】:

    【解决方案2】:

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

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

    编辑:您可能想要查看的一件事是 NHibernate.Search,如果您打算走 Lucene.NET 和 NHibernate 路线,它是一个为您处理 Lucene 索引创建和同步的项目。它有一些不错的功能,上次我检查它为每个类创建一个索引,自动索引所有属性。这对我们没有用,因为我们也想索引引用的对象,但在某些情况下这应该足够了。不知道项目现在处于什么状态,好久没看了。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多