Рекомендации по созданию быстрой, распределенной базы данных - PullRequest
2 голосов
/ 31 мая 2009

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

Данные / проблема выглядят так:

  1. В каждой таблице 2-5 ключевых столбцов и 1 столбец значений.
  2. Каждая строка имеет уникальную комбинацию клавиш.
  3. Мне нужно иметь возможность запрашивать любые подмножества ключей (т.е. key1 = 'blah' и key4 = 'bloo').
  4. Было бы неплохо иметь возможность быстро вставлять новые строки (обновляя значение, если строка уже существует), но я был бы удовлетворен, если бы мог сделать это медленно.

В настоящее время у меня это реализовано в MySQL, работающем на одной машине с отдельными индексами, определенными для каждого ключа, одним индексом для всех ключей (уникальным) и одним индексом, объединяющим первый и последний ключи (который в настоящее время является наиболее распространенным запросом I ' Я делаю, но это может легко измениться). К сожалению, это довольно медленно (и индексы в итоге занимают ~ 10-кратное дисковое пространство, что не является большой проблемой).

В моем распоряжении множество быстрых компьютеров (~ 40), что делает невероятную медлительность этой одиночной базы данных еще более раздражающей. Я хочу использовать все эти возможности, чтобы сделать эту базу данных быстрой. Я подумал о создании распределенной хеш-таблицы, но это затруднит запрос только для подмножества ключей. Кажется, что-то вроде BigTable / HBase было бы неплохим решением, но я еще не уверен, что более простого решения не существует.

Большое спасибо, любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 31 мая 2009

Я бы посоветовал вам прослушать этот подкаст для получения отличной информации о распределенных базах данных. эпизод-109-Ebays-архитектура-принципы-с-Shoup-Рэнди

0 голосов
/ 02 июня 2009

Чтобы указать на очевидное: вы, вероятно, связаны с диском.

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

Если вы столкнулись с этим узким местом, вы могли бы получить больше, переключившись на твердотельный накопитель, больший RAID или много оперативной памяти, чем при распределении базы данных по многим компьютерам (что в основном принесет вам больше из последних двух ресурсов)

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