Работа с огромной базой более 100 млн. строк

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X

Обсуждаются возможности шардинга и масштабирования базы данных для повышения производительности проекта

#1 23 июля 2019 в 18:49
Кто знает, есть ли возможность по связыванию 2-х разных б.д. на разных серверах по средствам join, или каких либо других средств. Необходимо работать с таблицами более 100 000 000 строк и связать их для отбора по параметрам. Тут необходимо горизонтальное масштабирование, но тогда теряются связи((( у кого есть идеи?
#2 23 июля 2019 в 21:27
Нет идей? ))) Всё так плохо? )))
#3 23 июля 2019 в 21:57
mr.KEVASC,
Идей сколько угодно. Нет понимания задачи.
Вы в курсе, что одновременный запрос в две базы данных возможен только в случае, если обе базы на одном сервере и у них один пользователь?
Поэтому "связывать" базы возможно только при помощи php. И это будет очень небыстро.
#4 24 июля 2019 в 00:07


mr.KEVASC,
Идей сколько угодно. Нет понимания задачи.
Вы в курсе, что одновременный запрос в две базы данных возможен только в случае, если обе базы на одном сервере и у них один пользователь?
Поэтому "связывать" базы возможно только при помощи php. И это будет очень небыстро.

Ris

Почему это на одном сервере? Что за глупости? ))) Это где такое нашли? ) Почему нет понимания задачи, надо join' ить несколько таблиц для сборки с разных серверов, или разбивать и обрабатывать по отдельности, может через node.js можно? может кто пробовал
#5 24 июля 2019 в 00:08
Рассматривал на mysql federated, но не понятно, может ли он join пропустить, может кто пробовал?
#6 24 июля 2019 в 00:31

Что за глупости? ))) Это где такое нашли? )

mr.KEVASC
Напишите умность.
Например код php, который сделает селект из двух баз на разных серверах.
#7 24 июля 2019 в 00:37


Что за глупости? ))) Это где такое нашли? )

mr.KEVASC
Напишите умность.
Например код php, который сделает селект из двух баз на разных серверах.

Ris

Вроде зайти на оф сайт и почитать не проблема. Может что-то не понимаю.

  1. CREATE TABLE federated_table (
  2. id INT(20) NOT NULL AUTO_INCREMENT,
  3. name VARCHAR(32) NOT NULL DEFAULT '',
  4. other INT(20) NOT NULL DEFAULT '0',
  5. PRIMARY KEY (id),
  6. INDEX name (name),
  7. INDEX other_key (other)
  8. )
  9. ENGINE=FEDERATED
  10. DEFAULT CHARSET=utf8mb4
  11. CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';
#8 24 июля 2019 в 00:38
Вопрос в том, если кто работал с таким, то работает ли на таком выборка, точно знаю что select и update работает норм, но остальное как? и какова эффективность таких завязок?
#9 24 июля 2019 в 00:40
Ris

P.S. Тут идет создание таблицы с завязкой на другом сервере. В том примере, что выше.
#10 24 июля 2019 в 00:55
mr.KEVASC,
Ответ MySQL: Документация

#1286 — Unknown storage engine 'FEDERATED'
----------------------------------------------------------------
Хотя… добавил federated в my.ini — работает.
Подцепился к удаленной базе. Селект работает нормально.
----------------------------------------------------------------
Инсерт тоже нормально работает. Добавил юзера в cms_users на локальном сервере и вошел под этим юзером на удаленном сайте.
И апдейт тоже нормально работает. Менял новому юзеру группы и никнейм.

работает ли на таком выборка, точно знаю что select и update работает норм

mr.KEVASC
Чем отличается выборка от селекта?
#11 24 июля 2019 в 02:03


mr.KEVASC,
Ответ MySQL: Документация

#1286 — Unknown storage engine 'FEDERATED'
----------------------------------------------------------------
Хотя… добавил federated в my.ini — работает.
Подцепился к удаленной базе. Селект работает нормально.

работает ли на таком выборка, точно знаю что select и update работает норм

mr.KEVASC
Чем отличается выборка от селекта?

Ris

Выборка по факту это связывание разных таблиц и получение конечного результата за один запрос.
Необходимо сделать join по таблице которая стоит в основной и удаленной базе. Необходимо понимание скоростей перебора больших массивов. И обработка в данном случае идет в основной баде и используются ресурсы основного сервера, или идет переброс на второй сервак.
#12 24 июля 2019 в 02:09
Искал различную информацию по крупным проектам, и там толком ничего нет. По факту все размазано и ничего точного. Понятно, что ничего не понятно)))) Даже те кто занимается серверами шепчут неуверенно, сервер надо помощнее...))) толком сами не знаю что предложить) отправил запрос в отдел продаж, интересно что они смогут предложить)
#13 24 июля 2019 в 02:20

Необходимо сделать join по таблице которая стоит в основной и удаленной базе.

mr.KEVASC
Таблица, которая подключена к другой таблице — это практически одна таблица, только разнесенная по разным серверам. Джойнить её саму к себе не нужно. Можно точно так же подключить все таблицы в базе, тогда можно будет джойнить что угодно к чему угодно.

Необходимо понимание скоростей перебора больших массивов.

mr.KEVASC
Тут на родном-то сервере выборка из миллиона строк периодически захлебывается на лимит оффсете, а Вы хотите по сетке таскать сто миллионов...

Завтра поэкспериментирую. Сделаю полностью сайт, где все таблицы будут подключены к удаленному тестовому серверу. Посмотрю, как выборка миллиона комментариев будет выглядеть...
-----------------------------------------------------------------
Простой SELECT * FROM `comments` занял 31 секунду.
Отображение строк 0 — 49 (1075562 всего, Запрос занял 31,0000 сек.)
Какая к чертям скорость?
#14 24 июля 2019 в 07:16


Необходимо сделать join по таблице которая стоит в основной и удаленной базе.

mr.KEVASC
Таблица, которая подключена к другой таблице — это практически одна таблица, только разнесенная по разным серверам. Джойнить её саму к себе не нужно. Можно точно так же подключить все таблицы в базе, тогда можно будет джойнить что угодно к чему угодно.

Необходимо понимание скоростей перебора больших массивов.

mr.KEVASC
Тут на родном-то сервере выборка из миллиона строк периодически захлебывается на лимит оффсете, а Вы хотите по сетке таскать сто миллионов...

Завтра поэкспериментирую. Сделаю полностью сайт, где все таблицы будут подключены к удаленному тестовому серверу. Посмотрю, как выборка миллиона комментариев будет выглядеть...
-----------------------------------------------------------------
Простой SELECT * FROM `comments` занял 31 секунду.
Отображение строк 0 — 49 (1075562 всего, Запрос занял 31,0000 сек.)
Какая к чертям скорость?

Ris

Это очень долго, у вас проблемы с настройками по базе походу, у меня выборка из 10м занимает не более 1с. и том что всё это ещё работает с join по 4 таблицам. И вполне может быть узким местом будет ещё жесткий диск, я такие проекты только на SSD рассматриваю, чтобы ж.д. небыл камнем преткновения.
#15 24 июля 2019 в 08:24

Почему это на одном сервере? Что за глупости? ))) Это где такое нашли? ) Почему нет понимания задачи, надо join' ить несколько таблиц для сборки с разных серверов, или разбивать и обрабатывать по отдельности, может через node.js можно? может кто пробовал

mr.KEVASC

единственное, пока, вижу решение —
писать апи интерфейсы для каждой из баз
а потом с ними работать
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.