我有一个包含大约 150,000 个实体的数据存储。当我使用过滤器查询商店时,我的查询真的很慢。我的结构是完全平坦的,即每个实体都是彼此的兄弟。
1:使用GQL代替过滤器会更好吗?
2:这不是数据存储的最佳用例吗,我应该改用 SQL 数据库吗?
这是我的代码示例:
// Look for a buy opportunity
dateFilter = new FilterPredicate("date", FilterOperator.EQUAL, dt);
scoreFilter = new FilterPredicate("score", FilterOperator.LESS_THAN_OR_EQUAL, 10.0);
safetyFilter = new FilterPredicate("score", FilterOperator.GREATER_THAN_OR_EQUAL, -1.0);
mainFilter = CompositeFilterOperator.and(dateFilter,scoreFilter,safetyFilter);
q = new Query("StockEntity",stockKey).setFilter(mainFilter);
q.addSort("score", Query.SortDirection.ASCENDING);
stocks = datastore.prepare(q).asList(FetchOptions.Builder.withLimit(availableSlots));
更多细节:
150,000 条记录,分为 500 只股票,因此每只股票大约 300 条记录,一个日期范围内的每一天。
像上面这样的查询,其中传递了一个特定的日期,并根据“分数”有效地过滤了 500 只股票,希望返回的记录数在 10 到 20 之间需要 30 秒以上才能完成,在我的开发机器。
还没有尝试过投入生产,但我想接下来我会尝试——我认为不会有太大的不同。我的开发机器是相当高规格的 iMac。