2

我需要将无向图存储在Google App Engine数据库中。 为了优化目的,我在考虑使用database indexes。 使用Google App Engine,有什么方法可以定义数据库表的列来创建其索引?Google App Engine数据库索引

我需要一些优化,因为我的应用程序使用上项目推荐基于内容的过滤此存储无向图。此外,推荐器算法更新某些图形边缘的权重。

如果无法使用数据库索引,请建议另一种方法来减少查询时间为图形表。我相信我的算法比图表操作更能从图表中执行更多的数据检索操作。

PS:我使用Python。

回答

3
+0

因此,如果使只使用平等的,就像一个查询,谷歌应用程序引擎就会自动建立它的一个指数“从边缘那里vertex1 == x和vertex2 ==Ÿ选择*”? – fjsj 2010-05-18 18:04:12

+1

实际上,开发Web服务器@fjsj可以为你完成所有的工作。从文档:开发Web服务器使管理索引配置变得容易:开发Web服务器可以为索引生成配置,而不是无法执行没有索引并且需要它的查询,从而可以使查询成功。如果您的应用程序的本地测试调用应用程序将进行的每种可能查询(种类,祖先,过滤器和排序顺序的每种组合),则生成的条目将代表一组完整的索引。 – 2010-05-18 19:25:24

1

你实际看到过于慢查询?我猜不是。我怀疑这有些不成熟的优化。应用程序引擎数据存储不会在内存中执行任何排序,筛选,连接或其他有意义的操作,因此查询时间通常相当稳定。特别是,查询延迟不取决于数据存储的实体数量,甚至不取决于您的查询的实体数量。它只取决于你要求的结果数量。

在相关说明上,向您的数据存储添加索引将而不是加快现有查询。如果一个查询需要一个自定义索引,它不会降级并且没有它就运行得更慢。查询根本不会运行,直到您添加索引。

你别说,select * from edges where vertex1 == x and vertex2 == y特定查询,数据存储可以在任何没有自定义索引运行它。有关更多详细信息,请参阅this section of the docs

总之,只要运行你所需要的查询,并没有考虑太多的指标,或尝试优化,如果你是一个DBA。它不是一个关系数据库。 :P