Почему в Google Appengine нет уникальных ограничений? - PullRequest
9 голосов
/ 06 августа 2011

Я видел много статей и вопросов о том, как реализовать уникальное ограничение в appengine, но на самом деле я не нашел никакого объяснения о , почему эта функция отсутствует .

ЕслиРазработчики appengine решили, что было бы лучше не реализовывать такую ​​функцию, я думаю, у них были веские причины, но мне было бы интересно понять, почему они так решили.

Было ли это решение основано на проблемах производительности?Почему?

Любые подробные объяснения по этому поводу будут с благодарностью.

Ответы [ 2 ]

12 голосов
/ 07 августа 2011

Как сказано в этом сообщении http://code.google.com/p/googleappengine/issues/detail?id=178#c14, распределенная природа хранилища данных затрудняет применение уникального ограничения. Если два экземпляра приложения одновременно пытаются создать объект, каждый из которых обладает свойством, которое должно быть уникальным, единственный способ обеспечить это потребует некоторой координации на всех машинах в хранилище данных.

Представьте себе комнату из 26 человек с листом бумаги, скажем, со столом домашних животных и их владельцев. Каждый человек контролирует каждого питомца с помощью другой буквы алфавита, например, человек 1 делает все, начиная с буквы A, человек 2 делает все, начиная с буквы B, и т. д.

Если вы хотите удостовериться, что домашнее животное по имени варежки было единственными варежками во всем хранилище данных, это легко, потому что только один человек в комнате будет вовлечен, и они смогут проверить свой лист бумаги, чтобы сделать уверен, что варежки еще не там.

Если вы хотите требовать, чтобы владельцы тоже были уникальными, вы можете представить, что каждый раз, когда кто-то хочет записать запись в свою таблицу, он должен сверяться с / каждым другим человеком /, чтобы убедиться, что никто другой не имеет этого имя владельца использовано. Это фундаментальная причина, по которой хранилище данных ядра приложений не допускает ограничений уникальности ни для чего, кроме ключей сущностей. Это просто невозможно сделать, если хранилище данных содержит тысячи серверов.

Надеюсь, вы поймете, почему существует это ограничение, и, надеюсь, моя поздняя ночная распечатка не слишком сложна для чтения: D

3 голосов
/ 06 августа 2011

Вы можете увидеть ответ от Google о добавлении уникальных ограничений в их список проблем для GAE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...