Я использую Tom Walder в Google Datastore Library для PHP, чтобы вставлять данные в хранилище данных Google App Engine.
$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('Ymd H:i:s', time())]));
Когда я вставляю данные, подобные приведенному выше коду, все, кажется, импортируется должным образом (каждое свойство говорит, что они индексируются).
Но когда я иду делать запрос с несколькими селекторами, он говорит: «Вам нужен индекс для выполнения этого запроса».
Мой запрос
Сообщение об ошибке
Кто-нибудь знает, что мне нужно сделать, чтобы убедиться, что мои запросы индексируются? Это то, что моя панель инструментов содержит множество данных, используя код, который я показал.
Как упоминал Alex Martelli в комментарии, в большинстве случаев ваши индексы создаются при запуске вашего приложения на devserver и запрашиваются данные datastore (это добавляет требуемые индексы для любого вопроса в ваш файл index.yaml
.
Таким образом, у вас есть два способа, которыми вы можете пойти на это.
1- Запустите приложение на локальном devserver, перейдите в Dev Developer Console, чтобы добавить один или два объекта в хранилище данных. Запустите ваши запросы, которые заполнят ваш index.yaml всеми необходимыми индексами. Затем вы можете запустить appcfg.py update_indexes, чтобы просто развернуть index.yaml (внизу этой страницы )
2. Другим решением будет прочитать это , страницу о том, как работают индексы хранилищ данных. Затем прочитайте эту расширенную статью об индексах. Вы также должны посмотреть следующую презентацию , которая даст вам лучшее представление об индексах и хранилище данных. Как только все будет сделано, index.yaml
, какие запросы вы хотите, и заполните необходимые индексы в index.yaml
, а затем разверните их с помощью того же метода, что и в 1.
Краткое описание работы индексов
Таким образом, вы можете думать о хранилище данных как о чистом ЧИТАТЕЛЕ. Он, как и обычные реляционные базы данных, не выполняет никаких вычислений, поскольку он считывает ваши данные и возвращает их. Поэтому, чтобы иметь возможность запускать заданный запрос (например, «все клиентские заказы, переданные до Рождества 2013»), вам нужна таблица, где все заказы клиента упорядочены по дате (поэтому системе не нужно проверять дату каждой строки чтобы увидеть, совпадает ли он. Он просто берет первый «кусок» ваших данных, вплоть до даты, которую вы ищете, и возвращает ее).
Поэтому вам нужно создать эти индексы, и они будут влиять на запросы, которые вы можете запустить. По умолчанию каждый атрибут индексируется сам по себе в порядке убывания. Для любых запросов по нескольким атрибутам (или с другим порядком сортировки) вам нужно иметь индекс (в этом случае они называются составными индексами ), созданный хранилищем данных, поэтому вам нужно объявить его в своем index.yaml
.
В последние годы Google добавил алгоритм объединения с использованием zigzag merge join , который в основном является способом получения двух составных индексов (которые начинаются с одних и тех же атрибутов, поэтому существует общая основа между двумя подзапросами) и запускают 2 подзапроса на их, то алгоритм объединяет ответы обоих подзапросов.