UUID первичных ключей и Memcached - PullRequest
0 голосов
/ 03 октября 2010

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

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

Пользователь ищет фильм (сервер поиска обрабатывает это), затем находит список, нажимает наэто и данные извлекаются из кеша.

Во всем этом процессе база данных никогда не читается.

Что вы думаете?

Ответы [ 3 ]

1 голос
/ 03 октября 2010

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

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

0 голосов
/ 06 октября 2010

Я поддерживаю ответ Криса, но я также хочу отметить, что если попытаться загрузить ЛОТ ключей в память сразу, то вы будете использовать много оперативной памяти.

Сравните:

6ba7b810-9dad-11d1-80b4-00c04fd430c8 - 37 байт или 38, если \ 0 завершен

Где 64-разрядное целое число составляет всего 8 байт.И, возможно, может быть сохранен в одном регистре.

Чтобы перейти на следующий уровень.

Допустим, вы хотите загрузить 100 000 идентификаторов в оперативную память.

Это происходит800 000 байт (64-битных) или 3 800 000 байт!

Обновление: 8 октября 2010 г.

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

Однако проверить целое число очень просто.intval () php, или .to_i ruby, и int () для perl.

Это повышает безопасность в отношении других людей, отправляющих вам подозрительные данные (веб-боты)

0 голосов
/ 03 октября 2010

Я предпочитаю использовать UUID ( GuidComb s на самом деле) для первичных ключей. Правда, некоторые признаки не соответствуют действительности, но с 64-битной СУБД везде и памятью довольно дешево, я считаю, что преимущества намного перевешивают недостатки. Мне не нужно ждать, пока вы вставите, чтобы узнать, каким будет ваш ПК.

...