powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Распределенные таблицы или что-то вроде того
18 сообщений из 18, страница 1 из 1
Распределенные таблицы или что-то вроде того
    #32728530
Illness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi!

Я разрабатываю систему, в которой несколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг). Ни одна СУБД с таким потоком вставок нормально справляться не будет. Возникла идея взять несколько компьютеров, поставить на каждый по СУБД и в каждой СУБД сделать нужную мне таблицу. Потом написать сервер, который стоит между клиентскими приложениями и СУБДами и который перенаправляет клиентские INSERT запросы попеременно на каждый из СУБДов, т.е. распределяет нагрузку. Вопросы: =)
1. Будет ли данная идея работать?
2. Может, такую систему уже кто-то строил или (еще лучше) кто-то уже написал такой load balancing сервер?


Заранее спасибо =)
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32728572
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько запией в секунду и какого размера(длина, колич полей) будет добавляться?
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729204
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Illnessнесколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг). Ни одна СУБД с таким потоком вставок нормально справляться не будет.Попробуйте записывать данные из приложений в лог-файл. И по расписанию, например раз в десять минут, специальным процессом загружать данные из этого файла в базу быстрым методом. Думаю, что для большинства СУБД существует такая возможность, например в оракле это sqlldr, в постгресе - copy.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729296
Illness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, я понимаю, что можно писать в файл логов, а потом сливать в базу периодически. Но при таком подходе в конце каждого периода БД будет очень сильно нагружаться, это будет тормозить другие приложения, работающие с базой, а это неприемлемо.
Я хочу сделать так чтобы нагрузка была равномерной, без резких скачков или спадов.
Насчет того, сколько вставок: чем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ. Колонок там около 15.
Кстати, я не знаток Oracle. Но там есть что-то под названием partitioning. Это не то что мне нужно?
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729442
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IllnessНасчет того, сколько вставок: чем больше, тем лучше.Думаю, что надо делать столько вставок, сколько требуется, а не больше. Если требуется почасовая, ежедневная, ежемесячная статистика, то зачем в базе хранить ежесекундные данные? Ведь в таблице с аггрегированными с точностью до часа данными будет в ~3600 раз меньше записей! :-)

IllnessПредставьте, что я измеряю какую-нибудь физическую величину.Тогда вы должы заранее знать требуемую от вас точность измерений. Иначе можете сразу, как это делал мой друг физик, дать ответ - "единица (по порядку велечины)".

IllnessЧем больше будет замеров, тем точнее можно проводить анализ.Пусть с помощью N измерений имеем погрешность расчетов 5%, 100*N - 0.5%. Если требуемая в задаче погрешность не более 5%, то я бы не стал делать 100*N измерений, а ограничился бы N. :-)
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729449
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IllnessНасчет того, сколько вставок: чем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ. Колонок там около 15. /quot]
Ну а в абсолютных величинах - "скока вешать в граммах"?

[quot Illness]Кстати, я не знаток Oracle. Но там есть что-то под названием partitioning. Это не то что мне нужно?
Может то, может и нет. Все равно все упрется в количество и качество дисков и скорость физической записи. ИМХО, при такой постановке вопроса - это критическое место.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729452
zayac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надежность системы обратно пропорциональна ее сложности.
А если в одну из баз прийдет "плохая" запись? Ну оператор написал коментарии к номеру телефона, и он перестал помещаться в поле, или нарушен primary key..., а в другие базы все зальется нормально, и разбираться с этим будет довольно сложно.
В Оракле например можно создать одну таблицу, разбить ее на партиции, партиции разложить по разным табличным пространствам. Для каждого табличного пространства свой набор файлов. Файлы разместить на различных жестких дисках. Это решение на физическом уровне. Правда в Оракле еще и пишутся табличное пространство отката и журналы - их тоже прийдется размещать на отдельных жестких дисках.
Начиная с 9-той версии в Оракле появилась такая вещь как BULK COLLECT. Если в двух словах, то это работа с данными не построчно, а массивами строк.
У меня все файлы тестовой базы лежат на одном SCASI диске. Заливка с использованием BULK COLLECT происходит примерно 1000 строк за 2сек. В таблице 33 поля, несколько из них большие текстовые, несколько OBJECT TYPE. При этом в процедуре которая производит INSERT/UPDATE происходит предварительная обработка и модификация данных.
И как сказал LeXa NalBat у sqlldr тоже скорость очень хорошая.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32729759
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так сколько записей планируется вставлять. В минуту/секунду...

А то телепаты в отпуске, аналитики тоже, фразу
авторчем больше, тем лучше. Представьте, что я измеряю какую-нибудь физическую величину. Чем больше будет замеров, тем точнее можно проводить анализ
никак сами не можем перевести в цифры. Может это 10 в минуту, а может 100 в секунду.

Например, вставка 10 000 записей за 4 секунды вас устроит?

-- Tygra's --
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32731173
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Illness

Занимаетесь точными вычислениями а задачу ставите как философ: "А на кончике какой иглы поместится больше ангелов?"

Попробуйте просчитать максимальное количеств, тогда можно и базу и оборудование порекомендовать.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32731486
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторIllness
Представьте, что я измеряю какую-нибудь физическую величину.

LeXa NalBat Тогда вы должы заранее знать требуемую от вас точность измерений. Иначе можете сразу, как это делал мой друг физик, дать ответ - "единица (по порядку велечины)".

Illness
Чем больше будет замеров, тем точнее можно проводить анализ.
LeXa NalBatПусть с помощью N измерений имеем погрешность расчетов 5%, 100*N - 0.5%. Если требуемая в задаче погрешность не более 5%, то я бы не стал делать 100*N измерений, а ограничился бы N. :-)

На самом деле еще хуже.
Если с помощью N измерений имеем погрешность расчетов 5%, то после 100*N измерений никогда не получишь 0.5%. Каждое новое измерение дает все меньшее улучшение погрешности и увеличивает затраты на обработку.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32731846
Illness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 сегмент и ставит флажок"надо
обработать". тут же демон подхватывает этот запрос и перенаправляет
его по нужному соединению.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32732499
Illness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В дополнение(если кому интересно)
есть еще 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
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32732848
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере?

А вообще кластеры уже придуманы достаточно давно. Даже для mysql. там есть встроенный кластер (тип таблиц ndb) (не production release, впрочем. То ли альфа то ли бета) и есть коммерческие решения для кластеров, например тут
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32733123
Illness
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хренинтересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере?

эта тулза еще будет работать одновременно и как система интеграции

Хрен
А вообще кластеры уже придуманы достаточно давно. Даже для mysql. там есть встроенный кластер (тип таблиц ndb) (не production release, впрочем. То ли альфа то ли бета) и есть коммерческие решения для кластеров, например тут
Встроенный кластер MySQL - это несколько СУБДов с авторепликацией, цель кластера - создать высоконадежную систему. Ни о какой распределении нагрузки там речь не идет. Насчет того, что предлагает emicnetworks, я ничего сказать не могу, но на первый взгляд там опять же репликация на первом месте.
Возможно, я не прав. тогда поправьте меня
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32733915
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Illness Хренинтересно. Если ваша тулза будет "распределять нагрузку" между несколькими базами на нескольких компьютерах, кидая insert-ы на них по очереди, как предолагается обычному клиентскому приложению (скажем собирабщему отчет) - находить нужные записи? на котором компьютере?

эта тулза еще будет работать одновременно и как система интеграции


Что то я сомневаюсь что такое возможно. Для случая скажем select * from log_table это несложно, а как быть при group by? При having? при order by? Похоже этой тулзе придется делать полноценный лексический и синтаксический разбор поступающих выражений и реализовать нехилую порцию функциональности sql сервера.

Извините, но мне это представляется чем-то слабо связанным с реальной жизнью...
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32734062
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IllnessНи одна СУБД с таким потоком вставок нормально справляться не будет.
Это было доказано экспериментально? Или это "я так думаю"? Что толку спорить - попробуй. Делов то на пол часа (дольше сервер устанавливать) - смоделировать нагрузку "в которой несколько приложений параллельно должны делать INSERTы в БД в _одну простую таблицу_ с очень большой скоростью(логгинг)." Сразу и понятно будет - справится или нет, и на каком значении "сломается" - это даже интересно. С результатами и описаниями эксперимента можно уже и сюда.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32734534
Фанат Ф.А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IllnessРебят, я понимаю, что можно писать в файл логов, а потом сливать в базу периодически. Но при таком подходе в конце каждого периода БД будет очень сильно нагружаться, это будет тормозить другие приложения, работающие с базой, а это неприемлемо.

Опять - двацать пять - логи должны считываться с машины
которая ТОЛЬКО ЭТИМ И ЗАНИМАЕТСЯ! Уж тогда-то ни каких перегрузок.
И На этой-машине соответственно ненужен SQL сервер - данные измерений
чудесно хранятся в plain-text. А забирать их оттуда можно и асинхронно -
потому что нацарапать приложение читающее файл фиксированного формата
и парсящее его для записи в SQL с определенного места вам на C или Perle
быстро напишут и недорого возьмут. А уж SQL получив новую порцию данных расфасует ее и добавит в отчеты.
Никаких перегрузок и "спадов".
Писать логи с "быстрых" устройств в SQL - все равно что ездить
на танке с твердотопливными ускорителями. 8)
Эффектно... но не эффективно.
И пардон, что за размазня в определениях ..... если это биллинг - у оборудования есть предельное количество одновременных соединенний. А опоздавший получит "Network Error" :) Если это съем данных с датчиков - есть предельная плотность замеров.
...
Рейтинг: 0 / 0
Распределенные таблицы или что-то вроде того
    #32735509
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Illness
Думаю да. Но. Не всегда можно определить, какая скорость будет необходима через год развития проекта. Поэтому в данный момент я хочу с самого начала построить систему, которая бы была наилучшей по скорости с точки зрения перспективы.


В этом сслучае лучше изучить такую вещь как масштабирование. И ориентироватся не на MySQL, а на что либо более серьезное. Очень важно знать предметную область, перспективы развития. Иначе - все вопросы не тянут даже как теоретические.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Распределенные таблицы или что-то вроде того
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]