Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Hi! Я разрабатываю систему, в которой несколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг). Ни одна СУБД с таким потоком вставок нормально справляться не будет. Возникла идея взять несколько компьютеров, поставить на каждый по СУБД и в каждой СУБД сделать нужную мне таблицу. Потом написать сервер, который стоит между клиентскими приложениями и СУБДами и который перенаправляет клиентские INSERT запросы попеременно на каждый из СУБДов, т.е. распределяет нагрузку. Вопросы: =) 1. Будет ли данная идея работать? 2. Может, такую систему уже кто-то строил или (еще лучше) кто-то уже написал такой load balancing сервер? Заранее спасибо =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 17:22 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Сколько запией в секунду и какого размера(длина, колич полей) будет добавляться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 17:38 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Illnessнесколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг). Ни одна СУБД с таким потоком вставок нормально справляться не будет.Попробуйте записывать данные из приложений в лог-файл. И по расписанию, например раз в десять минут, специальным процессом загружать данные из этого файла в базу быстрым методом. Думаю, что для большинства СУБД существует такая возможность, например в оракле это sqlldr, в постгресе - copy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 09:52 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Ребят, я понимаю, что можно писать в файл логов, а потом сливать в базу периодически. Но при таком подходе в конце каждого периода БД будет очень сильно нагружаться, это будет тормозить другие приложения, работающие с базой, а это неприемлемо. Я хочу сделать так чтобы нагрузка была равномерной, без резких скачков или спадов. Насчет того, сколько вставок: чем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ. Колонок там около 15. Кстати, я не знаток Oracle. Но там есть что-то под названием partitioning. Это не то что мне нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 10:33 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
IllnessНасчет того, сколько вставок: чем больше, тем лучше.Думаю, что надо делать столько вставок, сколько требуется, а не больше. Если требуется почасовая, ежедневная, ежемесячная статистика, то зачем в базе хранить ежесекундные данные? Ведь в таблице с аггрегированными с точностью до часа данными будет в ~3600 раз меньше записей! :-) IllnessПредставьте, что я измеряю какую-нибудь физическую величину.Тогда вы должы заранее знать требуемую от вас точность измерений. Иначе можете сразу, как это делал мой друг физик, дать ответ - "единица (по порядку велечины)". IllnessЧем больше будет замеров, тем точнее можно проводить анализ.Пусть с помощью N измерений имеем погрешность расчетов 5%, 100*N - 0.5%. Если требуемая в задаче погрешность не более 5%, то я бы не стал делать 100*N измерений, а ограничился бы N. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 11:15 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
IllnessНасчет того, сколько вставок: чем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ. Колонок там около 15. /quot] Ну а в абсолютных величинах - "скока вешать в граммах"? [quot Illness]Кстати, я не знаток Oracle. Но там есть что-то под названием partitioning. Это не то что мне нужно? Может то, может и нет. Все равно все упрется в количество и качество дисков и скорость физической записи. ИМХО, при такой постановке вопроса - это критическое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 11:17 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Надежность системы обратно пропорциональна ее сложности. А если в одну из баз прийдет "плохая" запись? Ну оператор написал коментарии к номеру телефона, и он перестал помещаться в поле, или нарушен primary key..., а в другие базы все зальется нормально, и разбираться с этим будет довольно сложно. В Оракле например можно создать одну таблицу, разбить ее на партиции, партиции разложить по разным табличным пространствам. Для каждого табличного пространства свой набор файлов. Файлы разместить на различных жестких дисках. Это решение на физическом уровне. Правда в Оракле еще и пишутся табличное пространство отката и журналы - их тоже прийдется размещать на отдельных жестких дисках. Начиная с 9-той версии в Оракле появилась такая вещь как BULK COLLECT. Если в двух словах, то это работа с данными не построчно, а массивами строк. У меня все файлы тестовой базы лежат на одном SCASI диске. Заливка с использованием BULK COLLECT происходит примерно 1000 строк за 2сек. В таблице 33 поля, несколько из них большие текстовые, несколько OBJECT TYPE. При этом в процедуре которая производит INSERT/UPDATE происходит предварительная обработка и модификация данных. И как сказал LeXa NalBat у sqlldr тоже скорость очень хорошая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 11:18 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Так сколько записей планируется вставлять. В минуту/секунду... А то телепаты в отпуске, аналитики тоже, фразу авторчем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ никак сами не можем перевести в цифры. Может это 10 в минуту, а может 100 в секунду. Например, вставка 10 000 записей за 4 секунды вас устроит? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 12:45 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
2 Illness Занимаетесь точными вычислениями а задачу ставите как философ: "А на кончике какой иглы поместится больше ангелов?" Попробуйте просчитать максимальное количеств, тогда можно и базу и оборудование порекомендовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2004, 22:28 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
авторIllness Представьте, что я измеряю какую-нибудь физическую величину. LeXa NalBat Тогда вы должы заранее знать требуемую от вас точность измерений. Иначе можете сразу, как это делал мой друг физик, дать ответ - "единица (по порядку велечины)". Illness Чем больше будет замеров, тем точнее можно проводить анализ. LeXa NalBatПусть с помощью N измерений имеем погрешность расчетов 5%, 100*N - 0.5%. Если требуемая в задаче погрешность не более 5%, то я бы не стал делать 100*N измерений, а ограничился бы N. :-) На самом деле еще хуже. Если с помощью N измерений имеем погрешность расчетов 5%, то после 100*N измерений никогда не получишь 0.5%. Каждое новое измерение дает все меньшее улучшение погрешности и увеличивает затраты на обработку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 08:33 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
tygraТак сколько записей планируется вставлять. В минуту/секунду... Например, вставка 10 000 записей за 4 секунды вас устроит? -- Tygra's -- Думаю да. Но. Не всегда можно определить, какая скорость будет необходима через год развития проекта. Поэтому в данный момент я хочу с самого начала построить систему, которая бы была наилучшей по скорости с точки зрения перспективы. Если кому-нибудь интересно, то вот то что я нашел по поводу распределенных систем и load balancing'a: 1. есть тулза, http://www.inspireonsoftware.com/Products-MyPQuery.htm Это то, почти то что хочу писать я. Но эта тулза - только для SELECT запросов по уже сделанным таблицам(да и то не все поддерживается). При этом она какая-то непонятная, сырая и стоит 400$. 2. В MySQL есть MERGE таблица. Это просто виртуальная таблица, которая состоит из нескольких таблиц, одинаковых по схеме. Load Balancing здесь опять таки не на INSERT'ах, а на SELECTах (типа можно сделать 2 таблицы на разных физических дисках и соединить их в 1 MERGE таблицу, в результате выборка будет быстрее) Но - здесь не кластер(одна БД) 3. Есть на gnu.org "SQL load balancer"(SQLB). но он опять не то что надо делает. Он висит между клиентами и несколькими БД. Основная его суть состоит в том, что он _постоянно_ поддерживает коннект к нескольким БД, при этом если через неге начинают проходить много запросов к какой-нибудь БД, то он создает дополнительное соединение к этой БД(или наоборот убивает, если мало запросов). Выигрыш в скорости получается, т.к. _нету_ времени задержки, связанного с подсоединением клиента к базе данных. В ихней архитектуре клиентское приложение просто записывает запрос в shared-memory сегмент и ставит флажок"надо обработать". тут же демон подхватывает этот запрос и перенаправляет его по нужному соединению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 12:00 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
В дополнение(если кому интересно) есть еще C-JDBC с их подходом под названием RAIDb - Redundant Array of Inexpensive Databases. Они написали open-source софтину, которая опять же стоит между клиентом и СУБД любого типа. При этом можно выполнять partitioning между СУБДами до уровня таблиц(т.е. на каждом сервере СУБД хранится отдельная таблица), при этом для клиентского приложения все, понятное дело, прозрачно. Но если пойти еще дальше(как я предлагал), то можно гранулировать данные до уровня отдельных row(а не до таблиц) вот ссылка http://www.objectweb.org/wws/d_read/marketing/public/projects/C-JDBC.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 15:50 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
интересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере? А вообще кластеры уже придуманы достаточно давно. Даже для mysql. там есть встроенный кластер (тип таблиц ndb) (не production release, впрочем. То ли альфа то ли бета) и есть коммерческие решения для кластеров, например тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 17:47 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Хренинтересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере? эта тулза еще будет работать одновременно и как система интеграции Хрен А вообще кластеры уже придуманы достаточно давно. Даже для mysql. там есть встроенный кластер (тип таблиц ndb) (не production release, впрочем. То ли альфа то ли бета) и есть коммерческие решения для кластеров, например тут Встроенный кластер MySQL - это несколько СУБДов с авторепликацией, цель кластера - создать высоконадежную систему. Ни о какой распределении нагрузки там речь не идет. Насчет того, что предлагает emicnetworks, я ничего сказать не могу, но на первый взгляд там опять же репликация на первом месте. Возможно, я не прав. тогда поправьте меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 00:17 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Illness Хренинтересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере? эта тулза еще будет работать одновременно и как система интеграции Что то я сомневаюсь что такое возможно. Для случая скажем select * from log_table это несложно, а как быть при group by? При having? при order by? Похоже этой тулзе придется делать полноценный лексический и синтаксический разбор поступающих выражений и реализовать нехилую порцию функциональности sql сервера. Извините, но мне это представляется чем-то слабо связанным с реальной жизнью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 13:24 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
IllnessНи одна СУБД с таким потоком вставок нормально справляться не будет. Это было доказано экспериментально? Или это "я так думаю"? Что толку спорить - попробуй. Делов то на пол часа (дольше сервер устанавливать) - смоделировать нагрузку "в которой несколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг)." Сразу и понятно будет - справится или нет, и на каком значении "сломается" - это даже интересно. С результатами и описаниями эксперимента можно уже и сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 14:07 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
IllnessРебят, я понимаю, что можно писать в файл логов, а потом сливать в базу периодически. Но при таком подходе в конце каждого периода БД будет очень сильно нагружаться, это будет тормозить другие приложения, работающие с базой, а это неприемлемо. Опять - двацать пять - логи должны считываться с машины которая ТОЛЬКО ЭТИМ И ЗАНИМАЕТСЯ! Уж тогда-то ни каких перегрузок. И На этой-машине соответственно ненужен SQL сервер - данные измерений чудесно хранятся в plain-text. А забирать их оттуда можно и асинхронно - потому что нацарапать приложение читающее файл фиксированного формата и парсящее его для записи в SQL с определенного места вам на C или Perle быстро напишут и недорого возьмут. А уж SQL получив новую порцию данных расфасует ее и добавит в отчеты. Никаких перегрузок и "спадов". Писать логи с "быстрых" устройств в SQL - все равно что ездить на танке с твердотопливными ускорителями. 8) Эффектно... но не эффективно. И пардон, что за размазня в определениях ..... если это биллинг - у оборудования есть предельное количество одновременных соединенний. А опоздавший получит "Network Error" :) Если это съем данных с датчиков - есть предельная плотность замеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 16:25 |
|
||
|
Распределенные таблицы или что-то вроде того
|
|||
|---|---|---|---|
|
#18+
Illness Думаю да. Но. Не всегда можно определить, какая скорость будет необходима через год развития проекта. Поэтому в данный момент я хочу с самого начала построить систему, которая бы была наилучшей по скорости с точки зрения перспективы. В этом сслучае лучше изучить такую вещь как масштабирование. И ориентироватся не на MySQL, а на что либо более серьезное. Очень важно знать предметную область, перспективы развития. Иначе - все вопросы не тянут даже как теоретические. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=163&tid=1546250]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
7ms |
| others: | 263ms |
| total: | 386ms |

| 0 / 0 |
