Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
Вставляются данные в такие таблицы:

Главная

CREATE TABLE "Syslog"(
  "MessageID" INTEGER PRIMARY KEY ON CONFLICT REPLACE AUTOINCREMENT UNIQUE ON CONFLICT REPLACE, 
  "Facility" INTEGER, 
  "Severity" INTEGER, 
  "HostID" INTEGER REFERENCES "Hosts"("IDHost") ON DELETE CASCADE ON UPDATE CASCADE, 
  "HostIPID" INTEGER REFERENCES "HostIPs"("IDHostIP") ON DELETE CASCADE ON UPDATE CASCADE, 
  "ProcessID" INTEGER REFERENCES "Processes"("IDProcess") ON DELETE CASCADE ON UPDATE CASCADE, 
  "DateTimeSend" DATETIME, 
  "DateSend" CHAR(10), 
  "TimeSend" CHAR(10), 
  "Message" VARCHAR, 
  "Alert" BOOLEAN, 
  "AlertReason" VARCHAR, 
  "AlertCategory" VARCHAR);

CREATE INDEX "idxDateTimeSend" ON "Syslog"("DateTimeSend" DESC);
CREATE INDEX "idxProcessIDSyslogMessages" ON "Syslog"("ProcessID");
CREATE INDEX "idxAlert" ON "Syslog"("Alert");
CREATE INDEX "idxHostIDSyslogMessages" ON "Syslog"("HostID");
CREATE INDEX "idxFacilityIDSyslogMessages" ON "Syslog"("Facility");
CREATE INDEX "idxSeverityIDSyslogMessages" ON "Syslog"("Severity");
CREATE INDEX idxTimeSend ON Syslog(TimeSend);
CREATE INDEX idxDateSend ON Syslog(DateSend);
CREATE INDEX "idxHostIPIDSyslogMessages" ON "Syslog"("HostIPID");


Производная от главной:

CREATE TABLE Firewalls (
 MessageID INTEGER REFERENCES Syslog(MessageID) ON DELETE CASCADE ON UPDATE CASCADE ,
 inInterface VARCHAR,
 outInterface VARCHAR,
 SrcMAC VARCHAR,
 DstMAC VARCHAR,
 SrcIP VARCHAR,
 DstIP VARCHAR,
 SrcPort INTEGER,
 DstPort INTEGER,
 Protocol VARCHAR);

CREATE INDEX idxDstPortFirewalls ON Firewalls(DstPort);
CREATE INDEX idxSrcMACFirewalls ON Firewalls(SrcMAC);
CREATE INDEX idxDstMACFirewalls ON Firewalls(DstMAC);
CREATE INDEX idxSrcIPFirewalls ON Firewalls(SrcIP);
CREATE INDEX idxSrcPortFirewalls ON Firewalls(SrcPort);
CREATE INDEX idxinInterfaceFirewalls ON Firewalls(inInterface);
CREATE INDEX idxoutInterfaceFirewalls ON Firewalls(outInterface);
CREATE INDEX idxMessageIDFirewalls ON Firewalls(MessageID);
CREATE INDEX idxDstIPFirewalls ON Firewalls(DstIP);
CREATE INDEX idxProtocolFirewalls ON Firewalls(Protocol);


Могу отказаться от всех индексов, кроме Primary и idxDateTimeSend в главной таблице и idxMessageIDFirewalls в производной от главной.
17 ноя 18, 15:20    [21737021]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48441

MS SQL, Cache, любая in-memory.

Posted via ActualForum NNTP Server 1.5

17 ноя 18, 15:22    [21737022]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48441

А если говорить в целом, то с таким потоком данных проблема не в том, чтобы их вставить в
БД, а чтобы понять "а назачем они туда вставляются", ибо плоские CSV-файлы со вставкой
справятся лучше.

Posted via ActualForum NNTP Server 1.5

17 ноя 18, 15:24    [21737024]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
Dimitry Sibiryakov
MS SQL, Cache, любая in-memory.


А что-то полегче не потянет: Firebird, ADS?
17 ноя 18, 15:32    [21737028]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48441

flight-op
А что-то полегче не потянет: Firebird, ADS?

Как написано выше: плоский CSV файл потянет. Firebird... ну, это будет зависеть от
ловкости твоих рук и мощности железа.

Posted via ActualForum NNTP Server 1.5

17 ноя 18, 15:35    [21737029]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Barclay
Member

Откуда:
Сообщений: 126
flight-op,

SAP HANA 2.0 Express Edition (бесплатно)
17 ноя 18, 17:20    [21737069]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
Barclay
flight-op,

SAP HANA 2.0 Express Edition (бесплатно)


(*Перекрестился*)
17 ноя 18, 18:04    [21737089]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
miksoft
Member

Откуда:
Сообщений: 37757
Dimitry Sibiryakov
плоские CSV-файлы со вставкой
справятся лучше.
+1
С промежуточной буферизаций в CSV/TSV потянет, наверное, практически любая СУБД.

И типы данных стоило бы пересмотреть. Например, дату/время явно будет экономичнее хранить в специализированных типах данных. В MySQL одно поле DATETIME занимает всего 5 байт, а у вас 20 отведено.
17 ноя 18, 20:05    [21737149]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Alibek B.
Member

Откуда:
Сообщений: 3244
> "DateTimeSend" DATETIME,
> "DateSend" CHAR(10),
> "TimeSend" CHAR(10),

Зачем последние два?


> inInterface VARCHAR,
> outInterface VARCHAR,

Почему не номер интерфейса?


> SrcMAC VARCHAR,
> DstMAC VARCHAR,

byte(6)


> SrcIP VARCHAR,
> DstIP VARCHAR,

byte(4)


> SrcPort INTEGER,
> DstPort INTEGER,

Целое, 2 байта.


> Protocol VARCHAR);

Целое, 1 байт.
17 ноя 18, 23:22    [21737188]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
miksoft
Dimitry Sibiryakov
плоские CSV-файлы со вставкой
справятся лучше.
+1
С промежуточной буферизаций в CSV/TSV потянет, наверное, практически любая СУБД.


А идея-то, по факту хороша. Простой парсер csv обработал миллион строк за ~6 секунд. Сразу, было дело, подумал "Да нет, бред какой-то" :)
17 ноя 18, 23:36    [21737195]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
Alibek B.
> "DateTimeSend" DATETIME,
> "DateSend" CHAR(10),
> "TimeSend" CHAR(10),

Зачем последние два?


для группировки


> inInterface VARCHAR,
> outInterface VARCHAR,

Почему не номер интерфейса?


<30>Nov 17 23:41:42 MT-CORE Masquerade-WAN srcnat: in:(unknown 0) out:ByFly, proto UDP, 192.168.2.1:45262->91.189.91.157[alphyn.canonical.com]:123, len 76 [Core:0]


Тут нет номера интерфейса. Здесь вообще может быть что угодно - от лога Cisco ASA до Windows Security EventLog. За универсальность решения приходится чем-то платить, в данном случае - избыточностью данных.
17 ноя 18, 23:51    [21737203]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28212
flight-op,

до varchar без размера запись где-то 52 байта (если однобайтовые символы в строках).
это значит, что 100к записей по 52 байта в секунду это 5 мегабайт в секунду, что не бог весть что.
Но если перемножить на минуты и т.д., выходит
300 мегабайт в минуту
18 гиг в час
423 гигабайта в сутки
157 терабайт в год.

Хрень какая-то. А если еще безразмерные варчары сюда приклеить, вообще бред какой-то. Очередная супер-база?
18 ноя 18, 02:13    [21737244]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28212
собственно, я тут 15 лет, и за это время вижу, что мало кто из постановщиков таких задач освоил простое умножение.
Парадокс?
18 ноя 18, 02:15    [21737246]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
miksoft
Member

Откуда:
Сообщений: 37757
kdv
Но если перемножить на минуты
Для этого пока мало информации. Возможно, желаемые 100000 в секунду - это всего лишь пиковая нагрузка, у которой неизвестна ни длительность, ни периодичность.
18 ноя 18, 02:54    [21737254]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Очень лысый
Member

Откуда: БОМЖ
Сообщений: 575
Зависит от того, для чего оно будет пользоваться и сколько храниться. Если будет храниться долго и ещё запросы к нему нужно делать, то можно какой-нибудь хадуп с паркетом. Записи сливаются в текстовое файло. Файло сливается в паркет с сжатием. Над ним какой-нибудь hive, да сейчас уже кучу движков придумали - выбирай на вкус.
18 ноя 18, 06:59    [21737280]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
kdv
flight-op,

до varchar без размера запись где-то 52 байта (если однобайтовые символы в строках).
это значит, что 100к записей по 52 байта в секунду это 5 мегабайт в секунду, что не бог весть что.
Но если перемножить на минуты и т.д., выходит
300 мегабайт в минуту
18 гиг в час
423 гигабайта в сутки
157 терабайт в год.

Хрень какая-то. А если еще безразмерные варчары сюда приклеить, вообще бред какой-то. Очередная супер-база?


Не надо перемножать, всё-таки актуальность логов имеет временные ограничения.
Преамбула:
Есть самописная система анализа логов. Скриптами парсит входящие данные и раскладывает их по таблицам. База SQLite, благо ничего критичного нет и данных максимум на сотню INSERT-ов в секунду.
Временами, почитывая всякое-разное из опыта эксплуатации людьми enterprise-решений удается почерпнуть что-то полезное для себя - где интересный отчет, где идею стэктрейса логов. В-общем, в мире больших решений есть вещи, полезные и для "игрушечных" систем. Перечитывая Хабр, наткнулся на интересный комментарий:

На данный момент у меня кластер А 10 машин (каждая машина 24 ядра 48 гб памяти) с трудом тянет 15к логов в секунду. На кластере Б памяти 128 гб на машину, что дает порядка 50к логов в секунду. Это при дневных индексах, 7-ми дневно ретеншене и около 1000 шард на кластер А, около 3000 шард на кластер Б. Если переключится на часовые индексы и снизить ретеншен до 3-х дней количество шард на кластере Б поднимается до 25к и он начинает падать с завидной периодичностью. У всех машин стоит по 4 диска 1.8тб. На кластере А количество документов около 7г и диски заняты от 26% до 45%, на кластере Б документов около 3.5г, диски заняты от 9% до 14%. Полный траффик логов у меня 130 логов/с, что значит мне нужно кластер А расширить до как минимум 200 машин, что будет 2 миллиона долларов только на покупку железа, обслуживание встанет в отдельные деньги. Глядя на подобные суммы начинаешь уже задумываться о спланке, который безумно дорог, но тебе вообще не надо думать об инфраструктуре.


Решил глянуть - а что же у меня с производительностью, получил (в зависимости от вида лога) цифры порядка 10-15к на ядро.
Упаси господь, думать что я со своей приблудой на Delphi собрался покорять мир, но нездоровое любопытство и толика свободного времени располагают попробовать реализовать полную производительность.

Преамбула закончилась

Я тут что подумал: можно действительно писать в csv-файл, производительность будет лимитирована дисковой подсистемой, а чтобы вытаскивать оттуда информацию - создать разреженный внешний индекс - с MessageID и временем с разрешением, скажем, в 0.5-1 сек.
Да, спасибо за идею!
19 ноя 18, 15:43    [21738251]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48441

flight-op
а чтобы вытаскивать оттуда информацию - создать разреженный внешний индекс - с MessageID и
временем с разрешением, скажем, в 0.5-1 сек.

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

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

Posted via ActualForum NNTP Server 1.5

19 ноя 18, 17:25    [21738379]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
Dimitry Sibiryakov
Обычно информация из логов нужна исключительно в виде каких-то агрегатов. Эти агрегаты
имеют гораздо меньший объём, чем сырые данные, так что тебе агрегатор, складывающий
выжимку в базу будет, вероятнее всего, полезнее, чем индекс.


А оно так и работает, по сырым данным формируются alert-ы. Но при разборе инцидента зачастую желательно знать, что происходило до и после. Так сказать, нужен контекст alert-а.
19 ноя 18, 17:35    [21738388]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
miksoft
Member

Откуда:
Сообщений: 37757
flight-op
данных максимум на сотню INSERT-ов в секунду.
flight-op
получил (в зависимости от вида лога) цифры порядка 10-15к на ядро.
У вас и так запас в 100-150 раз. Зачем вам вся эта деятельность?
19 ноя 18, 20:08    [21738489]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
"Почему кот яйца лижет? Потому что может" :))
19 ноя 18, 20:12    [21738494]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5237
flight-op,

а говорил что у тебя всё чики пуки - 21730248, а оно вон оно что, в базу он складывает....
20 ноя 18, 00:31    [21738643]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
kealon(Ruslan)
flight-op,

а говорил что у тебя всё чики пуки - 21730248, а оно вон оно что, в базу он складывает....


Прости, с трудом тебя понимаю, в базу нынче складывать постыдно и осуждается соборно?
Да, у меня есть проблемы записать то, что я могу обработать.
20 ноя 18, 00:59    [21738651]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5237
flight-op,

По моему опыту, скрипт написанный даже самым криворуким инженером, шпарит данные куда быстрее.
Просто по факту, вы подняля сабж о потоках не выяснив где у программы узкое место. Это первое что нужно делать при оптимизациях. Я в том сабже указал что что-то не так. Судя по тому что какое-то сомнение у вас зародилось, мой пост пошёл куда нужно.

В базу скидывать не постыдно, это определённый уровень. Но если программа претендует на что-то большее, то универсальные детские песочницы идут в топку. Представьте, например, что Procmon обрабатывал бы со скоростью 16к/с и грузил все процы под завязку.
20 ноя 18, 08:55    [21738711]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
flight-op
Member

Откуда:
Сообщений: 30
kealon(Ruslan)
flight-op,

По моему опыту, скрипт написанный даже самым криворуким инженером, шпарит данные куда быстрее.
Просто по факту, вы подняля сабж о потоках не выяснив где у программы узкое место. Это первое что нужно делать при оптимизациях. Я в том сабже указал что что-то не так. Судя по тому что какое-то сомнение у вас зародилось, мой пост пошёл куда нужно.


(*Миролюбиво*) Извини, Руслан, я что-то опять тебя не понимаю. В однопоточной программе я мог записать то, что обрабатываю. При повышении производительности за счет использования потоков возникло узкое место - запись на диск. Всегда возникает следующее бутылочное горлышко - в пределе это законы физики. В чём проблемы-то?

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

WBR
20 ноя 18, 13:14    [21739026]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5237
flight-op
kealon(Ruslan)
flight-op,

По моему опыту, скрипт написанный даже самым криворуким инженером, шпарит данные куда быстрее.
Просто по факту, вы подняля сабж о потоках не выяснив где у программы узкое место. Это первое что нужно делать при оптимизациях. Я в том сабже указал что что-то не так. Судя по тому что какое-то сомнение у вас зародилось, мой пост пошёл куда нужно.


(*Миролюбиво*) Извини, Руслан, я что-то опять тебя не понимаю. В однопоточной программе я мог записать то, что обрабатываю. При повышении производительности за счет использования потоков возникло узкое место - запись на диск. Всегда возникает следующее бутылочное горлышко - в пределе это законы физики. В чём проблемы-то?

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

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

мы на разных языках говорим, по поводу ваших неуверенности в себе: скрипты же вы не для себя добавили? наверное для кого-то? каким образом вы этого "кого-то" ассоциировали с собой?
20 ноя 18, 16:01    [21739302]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
George Nordic
Member

Откуда: Moscow
Сообщений: 1110
Это логи? Многие крупные операторы используют clickhouse для этих задач. Типа, под них и заточена - посмотрите.

С Уважением,
Георгий
21 ноя 18, 13:19    [21739994]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Очень лысый
Member

Откуда: БОМЖ
Сообщений: 575
И да, если логи, то есть специализированные движки для работы с ними. Например, тот же splunk, там можно и на табуны csv его натравливать, или на тот же hadoop.
21 ноя 18, 18:05    [21740453]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16577
https://www.elastic.co/elk-stack
4 дек 18, 10:48    [21752668]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите БД для 100000 INSERT-ов в секунду  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
В целом, если эти данные, которые с такой скоростью вставляют в таблицу, здесь и сейчас не нужны, зачем их так быстро вставлять? Можно использовать что-нить типа апач кафки, и играясь размером батча и кол-вом консьюмеров - можете легко подстраиваться под необходимую скорость вставки.

Предположим, мы хотим в 1 секунду обработать 100 000 сообщений. Размер батча делаем, допустим, 10000(на самом деле батч - это размер пакета, так что тут надо будет смотреть и считать), и 10 консьюмеров. Каждый консьюмер делает в одной транзакции вставку из 10 000 сообщений, вы итоге мы получаем не 100 000 сообщений в секунду, а 10 вставок в 1с, с чем справится любая вменяемая бд.


Суть тут:
https://habr.com/company/tinkoff/blog/342892/
4 дек 18, 11:17    [21752690]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Сравнение СУБД Ответить