Генерация первичных ключей: извлечение из запаса идентификаторов, хранящихся на прикладном уровне веб-приложения - PullRequest
0 голосов
/ 12 марта 2011

Я создаю веб-приложение, используя распределенную БД NoSQL.Однако для генерации идентификаторов для новых сущностей я использую MySQL в качестве сервера билетов Flickr

Я просто наткнулся на идею сохранить запас идентификаторов на прикладном уровне, чтобы новыесущностям можно легко назначать идентификаторы быстро, без необходимости выборки из БД, по одному для каждого из них.Вместо этого я могу просто извлечь запас идентификаторов из БД, скажем, около 1000, и использовать их до тех пор, пока стек не достигнет определенного предела оставшихся идентификаторов, когда я вытяну больше идентификаторов из БД, чтобы снова заполнить стек.

Ваши идеи и мысли по этому поводу приветствуются.

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Это хорошая идея, если вы не хотите, чтобы ваши идентификаторы были последовательными, и что вполне нормально, что некоторые идентификаторы никогда не используются.

например, SAP ERP делает это (конфигурируемо) для того, что он называет «диапазонами номеров».«когда у них нет требований к оформлению заказа и могут быть« дыры ».Каждый сервер приложений будет запрашивать набор ключей, а не только один, и отправлять их из этого кэша.Он пополняет свой кэш всякий раз, когда это необходимо.Это экономит некоторые циклы и блокирует БД.

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

0 голосов
/ 12 марта 2011

Хотя это будет работать, вы, вероятно, добавляете ненужную сложность.

Универсальные уникальные идентификаторы предназначены именно для этого случая. Предыдущий ответ здесь на SO содержит генератор UUIDv4 на чистом PHP , если вы не хотите использовать расширение UUID PECL .

Основной недостаток UUIDв том, что они ужасны , хотя они могут быть представлены в других формах, которые просто причудливо длинные .

...