bigton
@bigton
Web-программист

Как организовать хранение и доступ к большим таблицам?

Всем привет!

Есть структура таблицы с 20 полями, по 3 полям 3 разных индекса.
Есть 10 таблиц с описанной структурой в каждой из которых по 100М записей.
Поиск может происходить по любому из 3х полей.
Записи в таблицу добавляются в backend'е раз в сутки по утрам, выборка происходит много раз в течении дня.
Иногда записи из таблицы необходимо удалять.

Когда стоит подобная задача, но поиск может быть только по одному полю, я применяю шардирование при вставке и выборке данных. Например, `users_table_`.floor($user_id/1000000).

В принципе мне подходит решение с созданием таблицы MRG_MyISAM по 10 таблицам. Вставку производить в каждую таблицу по отдельности, а выборку по объединённой таблице. Но, в мануале написано:

MERGE tables use more file descriptors than MyISAM tables. If 10 clients are using a MERGE table that maps to 10 tables, the server uses (10 × 10) + 10 file descriptors. (10 data file descriptors for each of the 10 clients, and 10 index file descriptors shared among the clients.)


Это замечание отпугивает меня от использования MERGE.

Поделитесь своим опытом организации хранения и выборки в подобных случаях. Может быть есть решения отличные от MySQL.

Большое спасибо!
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Как вариант поставить какой-нибудь поисковый движок перед базой и всё проиндексировать.
Вы не указали что за данные и что за поиск поэтому это единственный вариант который можно предложить.

А в целом уже есть партицирование и InnoDB, MyISAM и mrg_MyISAM устарели в принципе в этом плане.

...
`users_table_`.floor($user_id/1000000).

Это какая-то хрень, а не шардирование, это скорее ближе к партицированию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы