Распечатывать имена всех людей старше 18 лет? - PullRequest
0 голосов
/ 11 апреля 2011

Это был довольно хороший вопрос, который был задан мне недавно.Предположим, у нас есть гипотетическая (вставьте сюда ваш любимый инструмент для хранения данных) база данных, которая содержит имена, возраст и адрес всех людей, проживающих на этой планете.Ваша задача - распечатать имена всех людей, чей возраст превышает 18 лет, в таблице HTML.Как бы вы поступили так?Допустим, что гипотетически население увеличивается со скоростью 1200 в секунду, и база данных обновляется соответствующим образом (не спрашивайте, как).Какова будет ваша стратегия, чтобы печатать имена всех этих людей и их адреса в таблице HTML?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011
  1. Хранение возрастов в таблицах БД звучит как рецепт для меня неприятности - это было бы невозможно поддерживать.Было бы лучше сохранить даты рождения , а затем создать индекс для этого столбца / атрибута.

  2. Необходимо получить начальный дамп таблицы для отображения,Просто вычислите дату 18 лет назад (скажем, D0) и используйте запрос для любого человека, родившегося раньше этого.

  3. Используйте триггеры БД для получения уведомлений о смерти, чтобы выможно сразу удалить их из таблицы.

  4. Поскольку люди становятся старше (к сожалению?), вы можете использовать ранжированные запросы для получения новых дополнений (то есть людей, которым исполнилось 18 лет с момента вашего последнего посещения).запросил таблицу).Например, если вы хотите обновить отображение на следующий день, вы выполняете запрос для людей, которые родились только в день D0 + 1 - нет необходимости запрашивать всю таблицу снова.

  5. Вы можете даже предварительно выбрать людей, которым на следующий день исполнится 18 лет, сохранить записи в памяти и добавить их на дисплей в тот самый момент, когда они достигнут этого возраста.

Кстати, даже с 2 КБ данных на каждого человека, вы получаете базу данных 18 ТБ (при условии 50% накладных расходов).Любой слегка перегруженный сервер должен быть в состоянии справиться с таким размером БД.С другой стороны, мысль о таблице на 12 ТБ HTML ужасает меня ...

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

1 голос
/ 11 апреля 2011

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

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

0 голосов
/ 11 апреля 2011

Вы заставили объединить все записи в одну таблицу?

Было бы проще создать таблицу для каждой возрастной группы (всего около 120 таблиц будетнеобходимо) и просто вставить входные данные в них, так как в вычислительном отношении проще просматривать 120 таблиц при вставке записи, чем просматривать более 6 000 000 000 при поиске записей.

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