2

我需要在 Google App Engine 数据库中存储一个无向图。出于优化目的,我正在考虑使用数据库索引。使用 Google App Engine,有没有办法定义数据库表的列来创建索引?

我需要一些优化,因为我的应用程序在基于内容的过滤上使用这个存储的无向图来进行项目推荐。此外,推荐算法会更新一些图边的权重。

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

PS:我正在使用Python。

4

2 回答 2

3

也许这会有所帮助:http ://code.google.com/intl/sv-SE/appengine/docs/python/datastore/queriesandindexes.html#Defining_Indexes_With_Configuration

于 2010-05-18T17:48:32.413 回答
1

你真的看到过慢的查询吗?我猜不是。我怀疑这有点过早的优化。应用引擎数据存储不会在内存中进行任何排序、过滤、连接或其他有意义的操作,因此查询时间通常相当恒定。特别是,查询延迟不取决于数据存储的实体数量,甚至不取决于与查询匹配的实体数量。它仅取决于您要求的结果数量。

在相关说明中,向数据存储添加索引不会加速现有查询。如果查询需要自定义索引,没有它就不会降级并且运行速度会变慢。在添加索引之前,查询根本不会运行。

对于您提到的特定查询select * from edges where vertex1 == x and vertex2 == y,数据存储区完全可以在没有自定义索引的情况下运行它。有关更多详细信息,请参阅文档的这一部分。

简而言之,只需运行您需要的查询,不要过多考虑索引或尝试像 DBA 一样进行优化。它不是关系数据库。:P

于 2011-01-25T23:15:45.490 回答