2012-07-01 44 views
2

可以说我有一个Photo类,包含标签和日期字段的多值属性。appengine的数据如何存储查询和索引多值属性?

我想允许用户根据标签执行查询(对于多于1个标签,只使用AND运算符)。

例如,假设用户搜索下雨天。 从照片中选择*其中tag ='clouds'AND tag ='rainy'

锯齿形合并如何工作?我知道两次扫描都会执行,并根据两次搜索的键是否指向相同的照片,然后返回。这是否同时发生?例如:搜索1找到包含标签'云'的照片时,搜索2正在查找包含标签“雨”的第一张照片。当两个搜索都完成时,它变成同步的。搜索1然后继续它的扫描,直到它碰到与S2相同的密钥。然后,每次搜索的密钥都是相同的,则返回照片,并且每次搜索时“光标”沿着1步移动?其次,定义多个索引是否会加快这类查询的速度?例如,如果我想允许多达4个标签,那么我需要定义索引,例如: 索引(照片) 索引(照片,标签) 索引(照片,标签,标签) 索引(照片,标签,标签,标签) 索引(照片,标签,标签,标签,标签) 然后,执行上述相同的查询会更快吗?

此外,使用我们原始的查询,可以说我们有数百万张照片标记为多云,但只有两张标记为下雨。这是否意味着之字形将执行相对较慢?由于其中一项搜索会尝试找到匹配项存在?更糟糕的是,如果我们有一百万张照片标记为“多雨”,一百万张照片标记为“云”,但没有一张照片中同时包含两个标签。定义上述索引是否解决了这个问题?

最后,让我们说一张照片有100个标签。这是否意味着上述所有索引都必须包含100个标签的每个组合?

我知道这里有got-yas(例如一个实体只能被索引5000次,而一个多值属性只能索引1000次)。

回答

0

锯齿形合并如何工作?

您可以查看Building Scalable, Complex Apps on App Engine以来从2009年开始的Google I/O视频。 Brett Slatkin解释了如何在27分钟时间内合并曲折曲线。正如他所说,“如果不显示它的工作原理,我就不能真正解释它。”

相关问题