2015-02-10 91 views
0

我正在使用Tom Walder's Google Datastore Library for PHP将数据插入到我的Google App Engine数据存储中。如何构建数据存储区索引(PHP GAE)

$obj_schema = (new GDS\Schema('Add Log')) 
    ->addString('name', TRUE) 
    ->addDatetime('time', TRUE); 
$obj_store = new GDS\Store($obj_gateway, $obj_schema); 
$obj_store->upsert($obj_store->createEntity(['name' => "test",'time' => date('Y-m-d H:i:s', time())])); 

当我像上面的代码插入数据,似乎一切正常导入(每个属性说,他们被索引)。

enter image description here

但是,当我去到做多选择查询它说:“你需要一个索引来执行这个查询”。

我查询 enter image description here

错误消息 enter image description here

有谁知道我需要做,以确保我的查询正在索引?这就是我的仪表板在使用我所展示的代码的大量数据时所显示的内容。

enter image description here

+1

通常,为您构建的索引是通过https://cloud.google.com/appengine/docs/python/config/indexconfig(即Python)在“index.yaml”中指定的,但我相信PHP方法非常相似 - 对不起,没有PHP专家!)。在Python中,您通常会根据所需的所有查询让本地测试运行dev_appserver.py生成所需的index.yaml,然后上传它 - 但最糟糕的情况是,您始终可以手动编辑并上传* * 如果需要的话。 – 2015-02-10 05:31:24

回答

2

正如亚历克斯·马尔泰利在评论中提到,大部分的时间,你的索引,当你在devserver运行你的应用程序,让您的数据存储会被查询有建(这需要更多的索引任何问题到您的index.yaml文件。

所以,你有两种方法可以去它。

1-运行你的应用程序在本地devserver,去你的开发“Developer Console”,以一个或两个实体添加到您的数据存储。运行你的查询,这将填充你的index.yaml需要索引。然后,您可以运行appcfg.py update_indexes刚刚部署index.yaml中(的this page底部)

2 - 你其他的解决办法是阅读this,在数据存储,索引如何工作的一个页面。然后阅读this关于索引的高级文章。您还应该注意以下presentation,这将使您更好地了解索引和数据存储。当这一切完成后,找出你想要的查询,并在index.yaml充实所需的索引,然后用同样的方法部署为1

的指标是如何工作的

这么快总结你可以将数据存储视为纯粹的读者。它不像正常的关系数据库那样在读取数据并返回数据时进行任何计算。因此,为了能够运行一个给定的查询(比如说“在2013年圣诞节前通过的所有客户订单”),那么您需要一个表格,您的所有客户订单都按日期排序(因此系统不必检查每一行的日期看看它是否匹配,它只需要你的数据的第一个“大块”,直到你要找的日期,然后返回它。

因此,您需要建立这些索引,它们会影响您可以运行的查询。默认情况下,每个属性都按其自身索引,按降序排列。对于对多个属性(或排序顺序不同)的任何查询,您需要拥有由数据存储构建的索引(在这种情况下,它们被称为composite indexes),因此您需要在index.yaml中声明它。

在过去的几年中,Google添加了zigzag merge join algorithm,这基本上是一种采用2个复合索引(以相同属性开始,因此在2个子查询之间存在共同点)和运行2个子查询然后让算法加入两个子查询的响应。

+0

非常丰富,谢谢@Patrice花时间写这篇文章。 – bryan 2015-02-12 16:27:52

+0

@Bryan我的荣幸:)。说实话,这不是第一次出现问题,这个答案就是值得的。我通常给较少的信息。今天,我决定为索引编写“be all all all”答案:P像这样,我们终于可以在某处标记重复问题:p – Patrice 2015-02-12 17:15:24

+0

作为FYI Toms库正在使用云数据存储,因此您无法使用此处所述的技术(1)你需要自己编写index.yaml文件。 – 2015-02-12 19:28:24