Optimization 基于重复搜索和页面的RavenDb优化
给定一个具有15个属性和3个IEnumerable属性的文档结构,其中每个属性最多可以有20个值 当我在raven中有50000个这样的文档时,用户可以通过提供7个左右属性的值来建立标准 比如说,最经常重复执行30次独特的搜索,平均每个用户每次执行搜索都会翻阅5页 现在,假设我发现7000个结果与用户构造的某些条件相匹配,如果我选择检索与该条件匹配的所有7000个ID(不断跳过take以检索我想象的所有ID),然后散列该条件并将其用作将7000个值存储在memcached中的键,那么当再次搜索相同的条件时,我可以简单地从缓存中检索id,获取用户所在页面的10个id,然后从raven按id加载结果。另外,当他们翻页时,我可以选择不使用skip and take再次执行相同的搜索,只需转到缓存并获取下一页的ID,然后转到raven进行加载 换言之,对于之前未搜索的每个条件,我们执行搜索,检索匹配ID,根据散列为键的条件缓存它们,然后当一个用户页面显示搜索结果或另一个用户执行相同的搜索时,我们只需转到raven,通过ID加载,我们可以通过查找散列条件作为键从memcached中检索ID 这种方法是否给了我任何好处,而不仅仅是一直进行搜索,在需要分页时跳过take,并让raven在重复使用搜索时重复使用动态索引Optimization 基于重复搜索和页面的RavenDb优化,optimization,memcached,ravendb,Optimization,Memcached,Ravendb,给定一个具有15个属性和3个IEnumerable属性的文档结构,其中每个属性最多可以有20个值 当我在raven中有50000个这样的文档时,用户可以通过提供7个左右属性的值来建立标准 比如说,最经常重复执行30次独特的搜索,平均每个用户每次执行搜索都会翻阅5页 现在,假设我发现7000个结果与用户构造的某些条件相匹配,如果我选择检索与该条件匹配的所有7000个ID(不断跳过take以检索我想象的所有ID),然后散列该条件并将其用作将7000个值存储在memcached中的键,那么当再次搜索相
注意:我正在使用LINQ api 您正在谈论建立自己的索引。无论您是否使用memcached或任何技术来存储索引,它都只是一个索引 Lucene.NET经过了大量优化,在您描述的查询中速度非常快,因此您做得更好的可能性很低。你需要考虑非常困难的情况,比如陈旧的索引、并发性等,即使你可以做得更好,它真的值得吗?我的意思是,如果你想让你的搜索执行得更快,那么在你的机器上安装另一个CPU不是更便宜吗
明确地说,是的,我绝对认为您应该使用标准的LINQAPI,让RavenDB创建动态索引。如果它们真的经常被使用,RavenDB很快就会将它们作为永久索引推广。您正在谈论构建自己的索引。无论您是否使用memcached或任何技术来存储索引,它都只是一个索引 Lucene.NET经过了大量优化,在您描述的查询中速度非常快,因此您做得更好的可能性很低。你需要考虑非常困难的情况,比如陈旧的索引、并发性等,即使你可以做得更好,它真的值得吗?我的意思是,如果你想让你的搜索执行得更快,那么在你的机器上安装另一个CPU不是更便宜吗
明确地说,是的,我绝对认为您应该使用标准的LINQAPI,让RavenDB创建动态索引。如果它们真的经常被使用,RavenDB很快就会将它们作为永久索引进行推广。不仅如此,如果不允许RavenDB进行这项工作,你会混淆RavenDB内部的许多内部优化。不仅如此,如果不允许RavenDB进行这项工作,您将混淆RavenDB内部的许多内部优化。