Рекомендации по созданию быстрой распределенной базы данных

StackOverflow https://stackoverflow.com/questions/930811

Вопрос

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

Данные / проблема выглядят следующим образом:

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

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

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

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

Нет правильного решения

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top