я использую Библиотека Google Datastore Тома Уолдера для 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('Y-m-d H:i:s', time())]));
Когда я вставляю данные, подобные приведенному выше коду, кажется, что все импортируется правильно (каждое свойство говорит, что они проиндексированы).
Но когда я делаю запрос с несколькими селекторами, он говорит: «Вам нужен индекс для выполнения этого запроса».
Мой запрос
Сообщение об ошибке
Кто-нибудь знает, что мне нужно сделать, чтобы убедиться, что мои запросы индексируются? Это то, что моя панель управления использует с большим количеством данных, используя код, который я показал.
Как отметил Алекс Мартелли в комментарии, большую часть времени ваши индексы создаются, когда вы запускаете свое приложение на devserver и запрашиваете там хранилище данных (это добавляет необходимые индексы для любого вопроса в ваш index.yaml
файл.
Таким образом, у вас есть два способа сделать это.
1- Запустите ваше приложение на локальном devserver, перейдите к своему devКонсоль разработчика«добавить одну или две сущности в ваше хранилище данных. Запустите ваши запросы, которые заполнят ваш index.yaml всеми необходимыми индексами. Затем вы можете запустить appcfg.py update_indexes, чтобы просто развернуть ваш index.yaml (внизу эта страница)
2- Ваше другое решение будет читать этот, страница о том, как работают индексы хранилища данных. Тогда читай этот расширенная статья по индексам. Вы также должны смотреть следующее презентация это поможет вам лучше понять индексы и хранилище данных. Как только это будет сделано, выясните, какие запросы вы хотите, и уточните необходимые индексы в вашем index.yaml
, затем разверните с помощью того же метода, что и в 1.
Краткий обзор работы индексов
Таким образом, вы можете думать о хранилище данных как о чистом ЧИТАТЕЛЕ. Он, как и обычные реляционные базы данных, не выполняет никаких вычислений, поскольку он читает ваши данные и возвращает их. Поэтому, чтобы иметь возможность выполнить данный запрос (скажем, «все клиентские заказы, переданные до Рождества 2013 года»), вам нужна таблица, в которой все ваши клиентские заказы упорядочены по дате (чтобы система не проверяла дату каждой строки). чтобы увидеть, соответствует ли он. Он просто берет первый «кусок» ваших данных, вплоть до даты, которую вы ищете, и возвращает ее).
Поэтому вам необходимо создать эти индексы, и они будут влиять на запросы, которые вы можете запускать. По умолчанию каждый атрибут индексируется отдельно в порядке убывания. Для любых запросов более чем к одному атрибуту (или с другим порядком сортировки) вам необходимо иметь индекс (в этом случае они называются составные индексы) построен хранилищем данных, поэтому вам нужно объявить его в своем index.yaml
,
В последние годы Google добавил алгоритм зигзагообразного слияния, это в основном способ взять 2 составных индекса (которые начинаются с одинаковых атрибутов, так что между этими двумя подзапросами есть общая основа) и выполнить 2 подзапроса, а затем алгоритм объединяет ответы обоих подзапросов. запросы.
Других решений пока нет …