Фон
Локальная база данных содержит около 1,3 миллиарда уникальных строк. Каждая строка косвенно связана с определенной широтой и долготой (местоположением). В каждой строке есть отметка даты.
Случай использования
Проблема заключается в следующем:
- Пользователь устанавливает дату начала / окончания и диапазон значений (например, от 100 до 105).
- Система собирает все строки, соответствующие указанной дате, сгруппированные по местоположению.
- Система выполняет определение местоположений, которые в течение этих дат имеют статистическую вероятность попадания в заданный диапазон значений.
- Система отображает все соответствующие местоположения для пользователя.
Это проблема скорости и масштаба.
Вопрос
Какова самая дешевая архитектура решения, которую вы можете себе представить, которая позволила бы такой системе получать результаты для пользователей менее чем за пять секунд?
Текущая система
Окружающая среда в настоящее время:
- PostgreSQL 8.4 (возможно обновление; переключение баз данных невозможно)
- R и PL / R
- XFS
- WD VelociRaptor
- 8 ГБ оперативной памяти (Corsair G.Skill; 1,3 ГГц)
- Четырехъядерный процессор GenuineIntel 7 (2,8 ГГц)
- Ubuntu 10.10
Модернизация оборудования приемлема.
Обновление - структура базы данных
Миллиарды строк в таблице напоминают:
id | taken | location_id | category | value1 | value2 | value3
- id - первичный ключ
- взятый - дата, назначенная строке
- location_id - ссылка на широту / долготу
- категория - описание данных
- value1 .. 3 - другие значения, которые пользователь может запросить
В taken
столбце обычно указываются последовательные даты location_id
, иногда в каждом местоположении есть данные с 1800 по 2010 год (около 77 000 дат, многие из которых дублируются, поскольку в каждом местоположении есть данные в одном и том же диапазоне дат).
Существует семь категорий, и таблицы уже разделены по категориям (с использованием дочерних таблиц). Каждая категория содержит ~ 190 миллионов строк. В ближайшее время количество строк в категории превысит миллиард.
Есть приблизительно 20 000 мест и 70000 городов. Места соотнесены с городом по широте и долготе. Назначение каждого местоположения определенному городу означает нахождение границ города, что не является тривиальной задачей.
идеи
Вот некоторые идеи, которые у меня есть:
- Найдите облачный сервис для размещения базы данных.
- Создайте рейд SSD (отличное видео).
- Создайте таблицу, которая объединяет все места по городам (предварительный расчет).
Спасибо!