Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 基于重复搜索和页面的RavenDb优化_Optimization_Memcached_Ravendb - Fatal编程技术网

Optimization 基于重复搜索和页面的RavenDb优化

Optimization 基于重复搜索和页面的RavenDb优化,optimization,memcached,ravendb,Optimization,Memcached,Ravendb,给定一个具有15个属性和3个IEnumerable属性的文档结构,其中每个属性最多可以有20个值 当我在raven中有50000个这样的文档时,用户可以通过提供7个左右属性的值来建立标准 比如说,最经常重复执行30次独特的搜索,平均每个用户每次执行搜索都会翻阅5页 现在,假设我发现7000个结果与用户构造的某些条件相匹配,如果我选择检索与该条件匹配的所有7000个ID(不断跳过take以检索我想象的所有ID),然后散列该条件并将其用作将7000个值存储在memcached中的键,那么当再次搜索相

给定一个具有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在重复使用搜索时重复使用动态索引


注意:我正在使用LINQ api

您正在谈论建立自己的索引。无论您是否使用memcached或任何技术来存储索引,它都只是一个索引

Lucene.NET经过了大量优化,在您描述的查询中速度非常快,因此您做得更好的可能性很低。你需要考虑非常困难的情况,比如陈旧的索引、并发性等,即使你可以做得更好,它真的值得吗?我的意思是,如果你想让你的搜索执行得更快,那么在你的机器上安装另一个CPU不是更便宜吗


明确地说,是的,我绝对认为您应该使用标准的LINQAPI,让RavenDB创建动态索引。如果它们真的经常被使用,RavenDB很快就会将它们作为永久索引推广。

您正在谈论构建自己的索引。无论您是否使用memcached或任何技术来存储索引,它都只是一个索引

Lucene.NET经过了大量优化,在您描述的查询中速度非常快,因此您做得更好的可能性很低。你需要考虑非常困难的情况,比如陈旧的索引、并发性等,即使你可以做得更好,它真的值得吗?我的意思是,如果你想让你的搜索执行得更快,那么在你的机器上安装另一个CPU不是更便宜吗


明确地说,是的,我绝对认为您应该使用标准的LINQAPI,让RavenDB创建动态索引。如果它们真的经常被使用,RavenDB很快就会将它们作为永久索引进行推广。

不仅如此,如果不允许RavenDB进行这项工作,你会混淆RavenDB内部的许多内部优化。不仅如此,如果不允许RavenDB进行这项工作,您将混淆RavenDB内部的许多内部优化。