我正在使用BreezeJS和AngularJS处理SPA,处理大量实体(其中一种类型有~60k实体)。这不是一个普通的网站,它是为特定目的而制作的。
大多数情况下,实体以可排序的分页列表显示。
上面提到的大量实体在工作线程中被缓存和查询,因此UI不会被阻止。我们希望在应用程序初始化后将客户端 - 服务器通信保持在最低限度,因此需要缓存大量数据。
工作线程中entityManager
的结果将导入到UI线程中的entityManager
,然后进一步处理。这一切都很好,我唯一的问题是在这样一个巨大的数据集上执行orderBy
需要太长时间才能完成(2.5-3.5秒)而没有索引。
这意味着如果订购到位,显示下一页的速度会慢得令人无法接受。
我当然可以为这个特定模型制作索引,并修改查询以针对缓存运行,但考虑到允许更改数据集,它不容易维护。
答案 0 :(得分:0)
Breeze缓存不今天有索引(索引?)......甚至连主键都没有。这将需要大幅增加代码库大小和复杂性来支持它们,我们还没有觉得这对我们通常看到的工作负载是值得的。
60K项目明显改变了这个等式。
我认为索引是一个很酷的可选模块,是某种插件。考虑到EntityManager
在缓存中发生任何变化时引发事件,我不认为维护起来会很困难。如果你想把它作为一个社区贡献...也许对Breeze Labs来说,我很乐意为你提供建议和帮助。