Я создаю приложение Google App Engine (python), и я узнаю об общей структуре. Я смотрел учебник и документацию для хранилища данных NDB, и у меня возникли трудности с обволакиванием концепций. У меня большой фон с базами данных SQL, и я никогда не работал с какой-либо другой системой хранения данных, поэтому я думаю, что именно там я столкнулся с трудностями.Простое объяснение Google App Engine NDB Datastore
Мое настоящее понимание таково: хранилище данных NDB представляет собой совокупность объектов (аналогичных записям БД), которые имеют свойства (аналогичные полям/столбцам БД). Объекты создаются с использованием модели (аналогичной схеме БД). Каждый объект имеет ключ, который генерируется для него, когда он хранится. Здесь я столкнулся с проблемой, потому что эти ключи, похоже, не имеют аналогии ни с чем в понятиях SQL DB. Они кажутся похожими на первичные ключи для таблиц, но они более тесно связаны с записями и фактически являются полями. Эти ключи NDB не являются свойствами объектов, но считаются отдельными объектами из объектов. Если объект хранится в хранилище данных, вы можете получить этот объект, используя его ключ.
Один из моих больших вопросов - где вы получаете ключи для этого? В некоторых документах, которые я видел, были показаны примеры, в которых ключи были просто созданы. Я этого не понимаю. Казалось, что когда объекты хранятся, метод put()
возвращает ключ, который может быть использован позже. Итак, как вы можете просто создавать ключи и определять идентификаторы, если исходные ключи генерируются хранилищем данных?
Еще одна вещь, с которой я, похоже, борюсь, - это концепция родословной с ключами. Вы можете определить родительские ключи любого типа, который вы хотите. Есть ли для этого предопределенная схема? Например, если у меня был подкласс класса под названием «Человек», и я создал ключ вида «Лицо», могу ли я использовать этот ключ в качестве родителя любого другого типа? Например, если бы я хотел, чтобы ключ «Чистка» был ребенком ключа «Человек», могу ли я затем объявить ключ «Автомобиль» дочерним по отношению к этому же «Человеческому» ключу? Или я не смогу после добавления ключа «Обувь»?
Я бы просто просто объяснил хранилище данных NDB и его API для тех, кто поступает из основного фона SQL.
Забыл все, что вы знаете о SQL, думая о хранилище данных. Хранилище данных хранит целые объекты по ключевым словам, включая имена свойств. В отдельности он создает индексы, соответствующие определенным критериям - некоторые автоматические и некоторые определяемые вручную. Сделайте некоторое чтение - https://developers.google.com/appengine/docs/python/datastore/entities –
Лично я считаю, что было огромной ошибкой включать GQL, потому что люди из фона SQL видят «select * from MyEntity» и сразу начните думать в терминах SQL. Это действительно рецепт для плохо ориентированных приложений. Это просто мое мнение. –