gpt4 book ai didi

javascript - Breeze.js - 查询大数据

转载 作者:行者123 更新时间:2023-11-28 01:52:25 25 4
gpt4 key购买 nike

TL:DR - 使用大数据和 Breeze.js

我还没有找到最优雅的方法来做到这一点,正在寻找具有查询大数据并仍然控制缓存的良好经验的人 -

如果我出去访问服务器,假设我收到了 20k 条记录,每条记录都有一个 Id 和一个 name 属性。因为我想在与该数据集交互时利用缓存,所以我缓存了数据并用它做一些事情。

然后说我想查看一组新数据,但不想丢失所有导航属性,因此我出去,访问服务器,向缓存添加更多实体,然后因为我喜欢查看我的数据我执行一个选择查询来将 POJO 插入网格中。

第一次访问服务器并缓存这些记录时,我不对本地缓存应用任何过滤器并不重要。然而,第二次,我的缓存现在可能包含我想要使用的实体数量的两倍。

再说一遍,我不想对数据进行大量复杂的过滤,这就是服务器的用途。

问题

如果不使用相同的查询参数,我就无法再访问本地缓存,这是不可能的(或在合理范围内)

由于我使用 Knockout.js 进行数据绑定(bind),因此我需要在返回数据后对数据使用选择查询以获取 POJO(ko.toJS() 不会展平导航属性,ko.toJSON() 不会不适用于 Breeze 实体,因为它认为它们是递归的)

中途解决方案

我可以创建实体管理器的副本,再次获取导航属性,然后重新查询数据,但随后我必须执行大量额外查询

我想做什么

删除该一种实体类型的缓存,这样当我用新实体重新填充它时,我就可以获取该数据来使用。

最佳答案

没有官方方法可以清除特定实体类型的缓存。你可以这样做

manager.getEntities('Foo').forEach(function(foo) {manager.detachEntity(foo);});

这是一种减法方法。如果您知道相关类型是什么,并且认为从新的管理器开始并添加相关类型而不是删除您想要删除的类型会更快,那么您可以考虑添加方法。

我认为这不是您真正想要做的,所以我只为其编写伪代码。

  • 提取相关类型:var related = manager.getEntities(['a', 'b', 'c']);。您只需执行一次;此后一次又一次地使用相关

  • 在下一个查询之前清除管理器:manager.clear();

  • 附加相关实体:lated.forEach(function(entity){manager.attachEntity(entity);});

  • 执行下一个“foo”查询。

我不知道哪种方法更适合您的应用程序。

您可以(在用户声音中)提出一个新的 EntityManager 方法,该方法可以清除单个类型(或类型数组)的缓存。也许是 EntityManager.clear() 方法的可选参数。我们在 DevForce 就有这样的东西。

关于javascript - Breeze.js - 查询大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com