假设我有一个Photo类,其中包含标签和日期字段的多值属性。
我想允许用户基于标签执行查询(仅使用AND运算符获得超过1个标记)。
例如,假设用户搜索下雨天。 从Photo中选择*,其中tag =' clouds' AND tag ='下雨'
zig-zag合并是如何工作的?我知道执行了两次扫描,并且根据两次搜索中的键是否指向同一张照片,然后返回。这是否同时发生?例如:当搜索1找到包含标签'云的照片时,Search 2正在查找第一张包含标签" rainy"的照片。两次搜索完成后,它将变为同步。搜索1然后继续扫描,直到它击中与S2相同的键。然后,当每次搜索的键相同时,返回照片,并且"光标"每次搜索都会移动1步?
其次,定义多个索引会加速这些查询吗?例如,如果我想允许最多4个标签,那么我需要定义索引,例如: 指数(组图) 索引(照片,标签) 索引(照片,标签,标签) 索引(照片,标签,标签,标签) 索引(照片,标签,标签,标签,标签) 然后,执行上述相同的查询会更快?
此外,使用我们的原始查询,假设我们有数百万张照片被标记为阴天,但只有两张被标记为下雨。这是否意味着zig-zag会表现得相对较慢?既然其中一个搜索会尝试找到匹配的存在?更糟糕的是,如果我们有100万张照片被贴上标签"多雨"并且有一百万人被标记为" cloudly"但是没有一张照片中有两个标签。定义上述索引会解决这个问题吗?
最后,假设一张照片有100个标签。这是否意味着上面的所有索引必须包含100个标签的每个组合?
我知道有些yas(例如一个实体只能被索引5000次,而一个多值属性只能被索引1000次)。
答案 0 :(得分:0)
zig-zag合并如何运作?
您可以在Building Scalable, Complex Apps on App Engine查看2009年的Google I / O视频。 Brett Slatkin解释了Zig-zag合并在27分钟后如何合并。正如他所说,“如果没有展示它是如何运作的,我就无法解释它。”