Doctrine ORM: лучший способ использования сервера билетов для генерации первичных идентификаторов? - PullRequest
1 голос
/ 15 ноября 2010

Я нахожусь в процессе создания централизованного сервера билетов для выдачи уникальных 32-битных INT идентификаторов.У меня есть функция, которая может быть вызвана в моем приложении, которая принимает параметр для сущности / таблицы, например, getPrimaryKey ('user').Я получил идею от Flickr через это сообщение в блоге:

http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/

В конечном итоге мы будем разделять наши данные между несколькими базами данных MySQL, и я хотел бы, чтобы этот код работал и работал какдоказательство концепции.

Мой вопрос: каков наилучший способ использования этой функции в Doctrine?Очевидно, что при использовании вышеуказанного сервера заявок мне нужно будет указать, что ни одна из моих моделей Doctrine не содержит автоинкрементный первичный ключ.

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

В идеале, я хотел бы, чтобы идентификаторы генерировались с использованием вышеуказанного метода при использовании отношений Doctrine, таких как:

$user = new User():  
$user->name = 'Bob';  
$user->Phonenumbers[]->number = '555-5555';  
$user->save();  

Кроме того, другая сторона этого сценария заключается в выборе данных из определенного сегмента.Моя текущая идея состоит в том, чтобы вести основной список диапазонов ключей, содержащихся в каждом шарде, как этот (игнорируйте небольшое количество строк в шарде):

Shard A user_id 1-1000
Shard B user_id 1001-2000
Shard C user_id 2001-3000

Затем я могу вызвать что-то вроде getShard ($ table_name, $ primary_key), чтобы получить шард и, возможно, переключить мое соединение с Doctrine на этот конкретный шард.Связанные данные для конкретного пользователя / объекта, скорее всего, будут находиться в одном и том же сегменте, поэтому я не слишком обеспокоен отношениями, охватывающими несколько фрагментов.Хотя, возможно, это и возможно, поэтому любые рекомендации по этому вопросу также будут высоко оценены.

...