我会尽力解释这个问题。使用服务器分页实现网格。根据N个实体的请求,DB应该返回一组数据,这些数据应该被分组或更好地表示转换,以便在转换阶段完成时它应该产生那些N个实体。
我能看到的最佳方式是:
Query_all_data() => Result; (10000000 documents)
Transform(Result) => Transformed (100 groups)
Transformed.Skip(N).Take(N)
转型阶段应该是这样的:
Result = [d0, d1, d2..., dN]
Transformed = [
{ info: "foo", docs: [d0. d2, d21, d67, d100042] },
{ info: "bar", docs: [d3. d28, d121, d6271, d100042] },
{ info: "baz", docs: [d41. d26, d221, d567, d100043] },
{ info: "waz", docs: [d22. d24, d241, d167, d1000324] }
]
Transformed中的每个对象都是网格中的实体。
我不确定它是否重要,但有问题的数据库是MongoDB,所有文档都存储在一个集合中。现在,这种方法的巨大缺陷在于它可以放慢大型数据集的速度,而这肯定是这种情况。
有没有更好的方法。也许不同的数据库设计?
答案 0 :(得分:1)
@dakt,您可以根据您使用数据的方式以几种不同的方式存储数据。在此过程中,以非规范化形式存储数据也可能有用,在这种形式下可能会出现一些重复数据。
我建议查看MongoDB用例 - http://docs.mongodb.org/ecosystem/use-cases/,看看是否有任何类似于你想要实现的内容。