【问题标题】:Breeze importEntities微风进口实体
【发布时间】:2015-02-23 15:58:18
【问题描述】:

当我的应用程序加载时,我会导出一些轻量级实体并将它们存储在本地缓存中,以便稍后当我必须再次使用这些实体时,我会从本地存储中导入它们并在本地执行查询。

有一个实体有 84389 行。我注意到 importEntites 需要更长的时间来执行这个实体。有什么办法可以加快速度吗?

var entities = manager.getEntities('Client');
var exportedEntity = manager.exportEntities(entities, { includeMetadata: false });

我将exportedEntity 存储在缓存中。

我在从缓存中获取后将上面的exportedEntity 导入到entitymanager 中。

entityManager.importEntities(exportedEntity);

对于客户端实体,上述语句需要更长的时间。客户端在表中有 80K 行。我不确定这是否会降低 importEntities 方法的执行速度。 实体导入后我也在本地执行查询。

【问题讨论】:

  • 不确定一个实体有 84389 行是什么意思。
  • 我的意思是说,对于数据库中有84389行(大量数据)的实体,importEntity操作需要更长的时间来执行。
  • 还是不清楚,一般来说单个实体代表单行。具有 84K 行的实体的概念没有意义。您是指返回 84K 行的查询吗?
  • 我在我的问题中添加了一些代码。我希望这会有所帮助。我可能做错了什么。我想导出所有 84K 行以存储在缓存中,然后将其导入回来。客户端是数据库中的一个表,其中没有那些行。

标签: breeze


【解决方案1】:

我认为你的意思是你有一个实体类型Client,有 84k 行/实体。

这是很多对象。我会重新考虑是否应该将这些数据视为丰富的 Breeze 实体,或者是否应该将它们以更简单、更紧凑的形式保存为数据对象。我强烈倾向于后者,特别是如果它们是只读的。将只读数据表示为实体的好处较少,而且在这些数量上,更可能出现糟糕的性能和内存使用情况。

请记住,并非所有数据都必须是实体,Breeze 很乐意获取实体和原始数据的混合。混合应用很常见。

如果您仍想探索将它们视为实体,您可以尝试以下导出命令,该命令将给定类型的所有实体输出为 JSON:

var exported = manager.exportEntities('Client', {asString:false, includeMetadata:false});

结果可以像以前一样导入。

var imported = manager.importEntities(exported);

可能会提高导出和导入速度(或不提高)。

之后您不必在本地查询。所有导入的实体都在imported.entities

【讨论】:

  • 感谢您的回答。我将尝试 asString:false 参数。之后我在本地执行查询,因为我想在访问结果之前应用排序和谓词参数。
  • 我再次请您考虑将这些数据视为实体是否合适。您还必须谨慎尝试 JSON 字符串化和解析如此多的数据,甚至它们是否适合本地存储。这不是严格意义上的 Breeze 性能问题。
  • 我试过 JSON stringify 但这并没有影响任何事情。如果不是实体,您能否建议在应用程序中处理客户端数据的方法?对我来说幸运的是,它是只读数据,正如你提到的,它不一定是微风实体。
  • 并不感到惊讶,主要区别在于是否调用了 JSON.parse。
  • 简单地调用该数据的端点有什么问题。这是元数据中定义的EntityType 吗?为什么?如果很容易从元数据中排除,请这样做。您仍然可以使用EntityManager 访问服务器端点,它将完全按照接收到的方式返回数据(而不是作为实体)。或者去掉中间人,使用任何支持你的应用程序的 AJAX 组件(例如,$httpjQuery.ajax)。然后单独管理这些数据,可能作为datacontext 服务的属性。
猜你喜欢
  • 2014-11-02
  • 2013-04-05
  • 2014-04-08
  • 2013-03-22
  • 1970-01-01
  • 2013-05-17
  • 2015-04-20
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多