|
|
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
перепробовал уже много разных движков. почти отчаялся и смирился с тем что придется делать свою базу на базе (bdb). суть задачи такая — я делаю мониторинг доступности разных хостов. предположим он тестирует какой-то хост каждую минуту на какие-то показатели. и надо хранить все результаты тестов за весь период тестирования. сколько бы лет не было. в результате если тестируемых объектов мало, записей в базе теоретически должно быть не очень много. но рассчитывают что клиентов будет много. и соответственно стал вопрос в том как хранить все эти результаты тестирования. цифры в миллиардах идут и более. для оптимизации можно использовать то что не нужно делать выборки по всему объему данных, а нужны только срезы за день , час и т.д. вопрос такой — умеет ли какая либо база по какому-то критерию разбивать таблицы на блоки. Пример: я запрашиваю у базы — а дай информацию по хосту ya.ru за 2009.10.10 23.00 - 23.15 и она считывает их из псевдотаблицы hour_ya.ru_2009.10.10_23.00.tbl, нужно отчет за день — запрашиваю из псевдотаблицы day_ya.ru_2009.10.10.tbl, и ответ от базы приходит мгновенно а не через 20 минут. То есть фактически производительность движка ограничивается объемом диска и скоростью чтения с него а не количество процов (так как не надо по огромным индексам бегать). Есть ли база с таким расширением и как она называется база и расширение ? если что не правильно объяснил, поправьте попробую подробней описать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 15:47 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadперепробовал уже много разных движков начни с уточнения этого пункта практически каждый опытный программист (в практически любой СУБД) укажет, тебе что ты не прав... Сам могу сказать по IDB Informix Dynamic Server: и с "fragmenting by expression" и без него (просто с индексами) вполне тебя удовлетворит (предупреждаю - за бабки)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:09 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualhead, Из обсуждаемых на этом форуме РСУБД подойдет почти любая, за исключением, наверное, SQLite и Access. Построить систему хорошо - это надо уметь независимо от СУБД. А построить плохо можно и на самой крутой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:21 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
ну дело именно в том что объемы большие, не миллионы а миллиарды т.е. при тестирование 80к хостов за год будет 42.854.400.000 и если по всё это держать в одной таблице и строить индекс то врядли все это будет быстро работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:26 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadну дело именно в том что объемы большие, не миллионы а миллиарды т.е. при тестирование 80к хостов за год будет 42.854.400.000 и если по всё это держать в одной таблице и строить индекс то врядли все это будет быстро работатьПочему вы так думаете? Есть и другие способы оптимизации работы БД помимо "строить индекс". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:40 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
miksoft, фишка в том чтобы база сама разбивала на таблицы и сама где искать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:41 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadmiksoft, фишка в том чтобы база сама разбивала на таблицы и сама где искатьИ этим способы оптимизации тоже не ограничиваются. В вашем случае значительно эффективнее будет не секционирование, которого вы непонятно зачем домогаетесь, а предрассчитанные агрегаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 16:45 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
miksoft, как по английскому называется этот термин который вы указали "предрассчитанные агрегаты"? и еще, есть необходимость не только в репортах за час,день и месяц но и в самих данных поминутно. так же решение должно быть экономным, ставить новый сервер из-за того что скорость работы движка меньше скорости прямого чтения с диска — не позволительно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 17:11 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
АнатоЛойСам могу сказать по IDB Informix Dynamic Server: и с "fragmenting by expression" и без него (просто с индексами) вполне тебя удовлетворит (предупреждаю - за бабки)... посмотрел fragmenting — оно не умеет само фрагменты создавать, надо задавать условие. т.е. нельзя сделать типа услвоие кратность какому-то числу. insert into table$(ceil(time/86400)) вот вроде такого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 17:16 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadкак по английскому называется этот термин который вы указали "предрассчитанные агрегаты"?Даже не знаю, а зачем вам? Это общий принцип, вряд ли вы его найдете в доке по конкретной СУБД. Заключается, грубо говоря, в том, чтобы в отдельной табличке хранить результат запроса вида SELECT список_полей, список_агрегатных_выражений FROM table GROUP BY список_полей и регулярно ее пополнять. Можно содержать несколько таблиц, агрегированных по разным признакам и/или с разным шагом. virtualheadтак же решение должно быть экономным, ставить новый сервер из-за того что скорость работы движка меньше скорости прямого чтения с диска — не позволительноЭто требование ни о чем не говорит, ибо практически у всех СУБД (за исключением in-memory) производительность ограничивается (помимо кривых рук разработчика) именно дисковым вводом/выводом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 17:25 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
miksoftДаже не знаю, а зачем вам? Это общий принцип, вряд ли вы его найдете в доке по конкретной СУБД. я пробовал гуглить по этому термину и ничего не нашел :( miksoft Это требование ни о чем не говорит, ибо практически у всех СУБД (за исключением in-memory) производительность ограничивается (помимо кривых рук разработчика) именно дисковым вводом/выводом. ок, пример. вот таблица для MySQL create table logs ( time datetime not null, id bigint, value bigint, index(time,id) ) ; в неё вставляется хtera записей и делается запрос вида select * from logs where id = 666 and time between '2009-09-01 22:00:00' and '2009-09-01 23:45:00'; в ответ за скажем 100 мс должен прийти ответ... у меня нет опыта работы с такими объемами и я не уверен что простая база данных выдержит это... вот поэтому и мудрю я не прав ? и движок одинакого быстро работает с любыми объемами данных в условиях если я на запрошу срез за месяц а буду запрашивать срезы за период не более нескольки часов ( в данном примере 105 записей ) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 17:48 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadmiksoftДаже не знаю, а зачем вам? Это общий принцип, вряд ли вы его найдете в доке по конкретной СУБД. я пробовал гуглить по этому термину и ничего не нашел :(Ну это несколько жаргонный термин. Из синонимов в Яндексе наибольшее количество страниц дает фраза "предварительное агрегирование". virtualheadок, пример. вот таблица для MySQL Код: plaintext 1. 2. 3. 4. 5. 6. virtualheadу меня нет опыта работы с такими объемами и я не уверен что простая база данных выдержит это... вот поэтому и мудрю я не прав ? и движок одинакого быстро работает с любыми объемами данных в условиях если я на запрошу срез за месяц а буду запрашивать срезы за период не более нескольки часов ( в данном примере 105 записей ) ?У правильно построенной БД с ростом объема данных время выполнения запросов растет далеко не линейно, а примерно как O(log(N)), т.е. значительно медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2009, 18:32 |
|
||
|
посоветуйте db engine и проектирование
|
|||
|---|---|---|---|
|
#18+
virtualheadАнатоЛойСам могу сказать по IDB Informix Dynamic Server: и с "fragmenting by expression" и без него (просто с индексами) вполне тебя удовлетворит (предупреждаю - за бабки)... посмотрел fragmenting — оно не умеет само фрагменты создавать, надо задавать условие. т.е. нельзя сделать типа услвоие кратность какому-то числу. insert into table$(ceil(time/86400)) вот вроде такого Хороший программист - тот, кто умеет эффективно использовать навязанные правила игры... Эх, если бы на все чихи существовало ПО, которое "само" всё умеет... В программе отследить что появилась дата в новом месяце (вобщем новый ключ для очередного фрагмента) и сделать САМОМУ слабо? а-ля: IBM Informix Dynamic Server (IDS), Version 11.50 Guide to SQL: Syntax Код: plaintext 1. 2. A la guerre comme a la guerre, как говорят французы, или по нашему "в лагере приходиться следовать распорядку дня, но сгущёнку под одеялом никто не отменял!" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2009, 10:02 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36246109&tid=1543038]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
7ms |
get forum data: |
5ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 354ms |

| 0 / 0 |
