powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогити с нереляционными(встраиваемыми) СУБД
40 сообщений из 40, показаны все 2 страниц
Помогити с нереляционными(встраиваемыми) СУБД
    #36305472
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
Привет Всем!
Посоветуйте, пожалуйста, не реляционную (встраиваемую) СУБД, для высоко посещаемого сайта.

Требования:

- Высокая скорость выборок / вставок
- Репликация, масштабирование и работа с параллельными процессами.
- Устойчивая работа с большими объемами информации

Присматриваюсь к MemcacheDB, Tokyo Cabinet/ Tokyo Tyrant, MongoDB. MongoDB в целом хороша, но падает бд иногда(((
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36305473
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
ПомогитЕ, конечно :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36306769
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не реляционную?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36307544
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
А если по делу написать? Сколько запросов вставки, сколько выборок, характерный объем вставки/выборки... Вы сначала указываете в требованиях "работа с большими объемами информации", и сразу же после называете как кандидат MemcacheDB - уж определитесь, большой объем данных у вас, или БД, помещающаяся в ОЗУ - или у вас на серверах терабайты ОЗУ? :-)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36307678
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
Winnipuh

Потому как не реляциионные (key-value хранилища) в разы быстрее. Как минимум не нужно парсить SQL и т.д


MBG

MemcacheDB в качестве хранилища использует BerkeleyDB. MemcacheDB и Memcache - это совсем разные вещи. Запросов около 50-70 в секунду. Из них большая часть на выборку, примерно около 35-50. Объем базы 38 ГБ. Все это на Mysql и уже очень туго работает.

Мне важно протянуть железо, как можно дольше. Поэтому решил отказаться от SQL и всего остального 'сахара'. Уже оптимизировал выборки, активно работаю с кешом, но это спасет не надолго. Тестил такое key-value хранилище, как Redis. Очень понравилось по скорости, но оно прожорливо на ОЗУ, потому как хранит базу там и периодично дампует ее на винт(((.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36307795
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ICPWinnipuh

Потому как не реляциионные (key-value хранилища) в разы быстрее. Как минимум не нужно парсить SQL и т.д


MBG

MemcacheDB в качестве хранилища использует BerkeleyDB. MemcacheDB и Memcache - это совсем разные вещи. Запросов около 50-70 в секунду. Из них большая часть на выборку, примерно около 35-50. Объем базы 38 ГБ. Все это на Mysql и уже очень туго работает.

Мне важно протянуть железо, как можно дольше. Поэтому решил отказаться от SQL и всего остального 'сахара'. Уже оптимизировал выборки, активно работаю с кешом, но это спасет не надолго. Тестил такое key-value хранилище, как Redis. Очень понравилось по скорости, но оно прожорливо на ОЗУ, потому как хранит базу там и периодично дампует ее на винт(((.

я задал вопрос потому, что "не реляционная" еще не означает некое подразумеваемое вами "ключ-значение" хранилище.
Кроме реляционных бывают сетевые, иерархические, объектные БД...и каждая имеет свои + и -свою область применения...
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36307865
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
Winnipuh,

Сорри, согласен - не уточнил. В моем случае, будут оптимальны, наверное, ключ-значение, именно их и перечислил.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36309063
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
ICPWinnipuh

Потому как не реляциионные (key-value хранилища) в разы быстрее. Как минимум не нужно парсить SQL и т.д


MBG

MemcacheDB в качестве хранилища использует BerkeleyDB. MemcacheDB и Memcache - это совсем разные вещи.

Насколько я себе понимаю, данные целиком кэшируются в ОЗУ, а изменения синхронизируются на диск. Хотя, может быть, это настраивается, но виденные мною тесты относились как раз к такому сценарию.

ICPЗапросов около 50-70 в секунду. Из них большая часть на выборку, примерно около 35-50. Объем базы 38 ГБ. Все это на Mysql и уже очень туго работает.

Мне важно протянуть железо, как можно дольше. Поэтому решил отказаться от SQL и всего остального 'сахара'. Уже оптимизировал выборки, активно работаю с кешом, но это спасет не надолго. Тестил такое key-value хранилище, как Redis. Очень понравилось по скорости, но оно прожорливо на ОЗУ, потому как хранит базу там и периодично дампует ее на винт(((.

Нагрузка небольшая, с такой легко справятся PostgreSQL и SQLite. На первом у меня до пары сотен запросов в секунду отрабатывает, на втором - десятки тысяч запросов в секунду (разумеется, в основном селекты). При вашем количестве запросов на модификацию вообще нет никаких проблем - на диске 7200 rpm (120 оборотов в секунду) мы можем выполнить 60 полных синхронизаций записи, т.е. эскулайт на десктопном диске позволяет 60 пишуших транзакций в секунду без каких-либо ухищрений, а постгрес намного более, т.к. объединяет набор транзакций в одну операцию сброса буферов.

Вот некоторые тесты упомянутых СУБД:
Тестирование PostgreSQL 8.1 на больших таблицах
Тестирование SQLite 3.6.17-mobigroup.2 на больших таблицах
Тестирование PostgreSQL 8.1 на больших таблицах: денормализация

Вероятно, вам следует оптимизировать построение отчетов, например, так
Построение отчетов - Временные таблицы и виды

Возможно и еще ускорить сложные выборки, но это потребует более сложных техник, в частности,
Построение отчетов - Использование защищенного интерпретатора в pltcl
Логическая оптимизация - Массивы

Что же касается key->value СУБД, то применять их для ускорения выборок - нонсенс. Вот что касается скорости модификации, тут есть большие резоны. Но, если вы посчитаете, то размер БД за год при таких скоростях модификации должен , как минимум, составлять терабайты, иначе овчинка не стоит выделки.


Вы работаете с весьма прожорливой, "падучей" и кривой MySQL, но проблема-то вовсе не в реляционных СУБД как таковых, а в конкретной реализации выбранной вами. Если вы в этом сомневаетесь, попробуйте выполнить вышеназванные тесты на нескольких разных СУБД на своем железе, сами увидите.

P.S. C PostgreSQL нужно быть очень осторожным, когда размер _выборок_ превышает размер ОЗУ. Вы о размере выборок ничего не сказали, но упомянутое мною ограничение касается очень немногих проектов, так что у вас не слишком много шансов на него наткнуться...
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36309877
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
MBG
Насколько я себе понимаю, данные целиком кэшируются в ОЗУ, а изменения синхронизируются на диск. Хотя, может быть, это настраивается, но виденные мною тесты относились как раз к такому сценарию.


Посмотрел, полное кэширование не является необходимым, можно настроить объем shared memory для berkeleydb, а полное кэширование это в Redis.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36310211
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
MBG, Спасибо большое за ссылки. Очень полезно!

авторВы работаете с весьма прожорливой, "падучей" и кривой MySQL, но проблема-то вовсе не в реляционных СУБД как таковых, а в конкретной реализации выбранной вами. Если вы в этом сомневаетесь, попробуйте выполнить вышеназванные тесты на нескольких разных СУБД на своем железе, сами увидите.

Даже не сомневаюсь насчет Mysql. Выбрал ее, лишь потому, что знал лучше всего. Теперь хочу сменить БД.

авторЧто же касается key->value СУБД, то применять их для ускорения выборок - нонсенс. Вот что касается скорости модификации, тут есть большие резоны.


Не очень понял. А разве выборки на key-value хранилищах происходят медленнее???? Судя по тестам, любое хранилище работает на выборках в разы шустрее. И количество запросов в секунду выдерживают гораздо больше.

авторНо, если вы посчитаете, то размер БД за год при таких скоростях модификации должен , как минимум, составлять терабайты, иначе овчинка не стоит выделки.???

То есть на больших объемах будет существенное падение скорости выборок???

У меня в основная масса запросов - это селекты с условиями. Проблема, что у мускула нет нормальных средств для работы с деревьями/графами. Поэтому поиск по древовидной структуре сводится к итеративной выборки элементов, на каждом уровне дерева. Даже если помучаться и сделать на хранимых процедурах - не спасет, они работают медленнее чем клиентский скрипт на СИ. Кеширование спасает, но не надолго - связи в дереве периодично модифицируются.

Вот поэтому глянул в сторону хранилищ "ключ-значение". Все древовидную структуру перенести в них, а обрабатывать скриптом на СИ.
Redis шустр, но не подходит - у меня озу 4Гб всего.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36310271
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Выборки в SQL СУБД выполняются практически с той же скоростью. А вот при агрегации на уровне приложения вы можете существенно потерять в эффективности, т.к. придется много данных передавать из БД в приложение.

Для БД, увеличивающейся на 10 ГБ в год, характерна нагрузка порядка единиц запросов модификации в секунду. При том, что реляционные СУБД на современных десктопах выдерживают в сотни раз большие нагрузки. Потому нет никаких разумных причин отказываться от использования реляционных СУБД.

Для работы с деревом имеет смысл сделать единственным запросом такую выборку, по которой можно построить дерево на уровне приложения (если таблица небольшая, порядка тысяч записей, может даже оказаться оправданным прочитать ее целиком). Рекурсивный SQL выдержат только встраиваемые СУБД (SQLite, BerkeleyDB), в которых prepared запрос выполняется чрезвычайно быстро. При использовании хранимой функции можно в ней кэшировать запрос или некоторые часто используемые выборки, вариантов оптимизации много.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36310325
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
MBG,

Код: plaintext
Выборки в SQL СУБД выполняются практически с той же скоростью. 

А по тестам скорость выборок очень различна. Небольшой материал по этому поводу Redis vs MySQL vs Tokyo Tyrant

А вот при агрегации на уровне приложения вы можете существенно потерять в эффективности, т.к. придется много данных передавать из БД в приложение.[/src]
Согласен, но вот если сама БД встроена в приложение, разве скорость выборок будет ниже чем при использование хранимых процедур, например у PostgreSQL ???

Код: plaintext
Потому нет никаких разумных причин отказываться от использования реляционных СУБД.

Как и предстоит переезд на другую СУБД, то буду делать все аккуратно и неспешно. А пока изучаю возможные альтернативы SQL.

Код: plaintext
Для работы с деревом имеет смысл сделать единственным запросом такую выборку, по которой можно построить дерево на уровне приложения (если таблица небольшая, порядка тысяч записей, может даже оказаться оправданным прочитать ее целиком).

Я так и делаю, есть промежуточные таблицы в которых кешируются пути. Проблема в том что древовидная структура из нескольких миллионов записей. В идеале хотелось бы осуществлять поиск по всему дереву, но это сейчас накладно итеративно выдергивать его с базы и поэтому стоит ограничение на 3 уровня.


Код: plaintext
1.
Рекурсивный SQL выдержат только встраиваемые СУБД (SQLite, BerkeleyDB), в которых prepared запрос выполняется чрезвычайно быстро. При использовании хранимой функции можно в ней кэшировать запрос или некоторые часто используемые выборки, вариантов оптимизации 
много.

А вот с рекурсией вообще удобно. Даже не знал, что SQLite и BerkeleyDB имеют ее в распоряжении.

Спасибо, много знаний черпаю из Ваших постов!
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36310347
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
А вы попробуйте тесты для SQLite. 10 000 запросов в секунду это немного для встраиваемой реляционной СУБД.

Хранимые процедуры в PostgreSQL выполняют запросы медленнее, чем те же запросы исполняются в SQLite. Как минимум, потому, что первый - версионник, и имеет некоторый оверхед из-за необходимости анализировать версии записей. Далее, при агрегации на уровне СУБД нет необходимости хранить все данные в памяти - их можно агрегировать "на лету" (POstgreSQL, насколько мне известно, этого делать не умеет), а передавая их в приложение или хранимую процедуру, мы опять же выполняем лишние копирования данных, что требует выделения и очистки памяти и проч. действия. Встраиваемые СУБД хороши тем, что в них обычно обеспечена эффективная работа с данными на диске, в то время как клиент-серверные реализации запихивают все исходные данные в кэш, надеясь на то, что они еще понадобятся - при этом, если данные не помещаются в кэш или выборки оперируют разными данными, возникают большие проблемы.

SQLite и BerkeleyDB не имеют встроенной рекурсии. Но prepared запросы в них позволяют извлекать данные настолько быстро, что набор последовательных запросов, извлекающих одну строку, почти эквивалентен одному запросу, извлекающему набор строк.
Как пример, поиск направления для набранного номера в телефонном биллинге (SQLite):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        set prefix [string range $number  0  $max- 1 ]
        while {[string length $prefix] >= $min} {
            # если указанный индекс не будет найден, запрос вернет ошибку - используем для гарантированного предотвращения неиндексированного поиска
            set rowid [$db onecolumn {select rowid from const_telephony_direction indexed by const_telephony_direction_complex_idx
                                        where name=$name and destcode=$prefix and delete_date IS NULL}]
            if {$rowid ne {}} break
            set prefix [string range $prefix  0  end- 1 ]
        }
СУБД SQLite закэширует SQL-запрос и каждый последующий вызов уже не парсит SQL код, выполняется только выборка согласно значениям параметров запроса. В постгресе эквивалентный код необходимо поместить в хранимую процедуру, которая при первом обращении подготовит prepared запрос и сохранит его в глобальной переменной, а возвращаемый результат представить в виде некоторой структуры данных - соответственно, больше работы на выполнение запроса, да еще нужно формировать данные в функции и потом их разбирать в приложении (функции, возвращающие набор строк, работают существенно медленнее, чем возвращающие единственное значение).
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36310523
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
MBG,

Тогда потестю на своих железках SQLite и Tokyo Cabinet. Интересно посмотреть, насколько будет отличаться результат.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36311142
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache'.

http://www.intersystems.ru/

http://www.intersystems.ru/cache/devcorner/index.html

http://www.citforum.ru/seminars/cbd99/cache.shtml

можно получить экземпляр субд для тестирования (бесплатно).

субд является объектной, при этом, поддерживает три вида доступа к данным, хранящимся в ней:
прямой доступ - самый быстрый
доступ через sql
объектный доступ

и еще один немаловажный плюс - для Cache' есть раздел форума на данном сайте :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36324001
Onsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
neznau,

А каше разве 'шустрее' Mysql ??? имхо он скорее навороченнее и помедленнее. Хотя, могу ошибаться:)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36344136
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет алергии на отечественные "накаленно-гаражные" разработки присмотритесь к HyTech выручала многократно в случаях существенного превосходства поисковых запросов над запросами на модификацию/добавление, и кстати прямой доступ(без sql) специфицирован изначально, первое знакомство было в соревновании и сокрушительной победе:
EC1036(ADABAS) и 486DX2-66(HyTech)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36344440
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, pureproft!
You wrote on Wed, 02 Dec 09 14:15:24 GMT:

pureproft p>первое знакомство было в соревновании и сокрушительной победе: EC1036(ADABAS) и 486DX2-66(HyTech)
на дворе XXI-век.
кому нужно это окаменевшее ископаемое...

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36344456
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nist.ru ещё не окаменел и речь шла о первом знакомстве а при последнем HyTech не уступал на технике существенно скромней чем конкурент ORACL на монстре от SimesNix...
про алергию я упоминал без маски не подходить.... :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36350010
ICP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICP
Гость
pureproft,
Спасибо...гляну, прям интресно стало)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36350323
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ICPpureproft,
Спасибо...гляну, прям интресно стало)
кстати обнаружил кроме нист hytechdb.ru и openinfotech.ru если будете тестить отпешитесь о впечатлениях.... жалко, что за столько лет не довели до нормальной коробочной версии

Модератор: Тема перенесена из форума "Другие СУБД".
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36956081
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за запросы-то такие, что 50 запросов в секунду уже ощутимо тормозят сервер? Может, все-таки попробовать или БД настроить или попробовать более серьезные БД (Postgress, DB2)?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36958119
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OnsiteА каше разве 'шустрее' Mysql ??? имхо он скорее навороченнее и помедленнее. Хотя, могу ошибаться:)Аж вздрогнул, когда такое прочитал. Жуть несусветная, не обижайтесь

Угробить производительность, конечно, можно и на каше. И даже очень просто, автоматически не всегда оптимизуруется как надо.
Но это как раз из тех субд, которая позволит работать на очень "низком уровне", причем, когда вам нужно, поднимаясь до sql и объектов. Или наоборот, работая с объектами или sql опускаться до нижнего уровня. Плюс очень гибкая модель данных, можно накрутить туда все, что хотите.
(В том числе и ваши ключ-значение, это в ней даже роднее, чем sql или объекты)
На каше можно эмулировать другие СУДБ, каше же вряд ли кто сэмулирует.

Попробуйте, она правда денюх стоит. Лягух в нашем болоте достаточно, если что - поможем.
Кстати, служба поддержки у них тоже хорошая, все хвалят.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36958237
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно, я неправильно расставил акценты, но каше - это очень большая гибкость и большой контроль над приложением.
Я не знаю, сколько она там может обрабатывать запросов (Олег Оленин разгонял скорость до 80 тыс запросов в секунду на запись, но это нужно постараться)

Что касается скорости приложений, то могу сравнить сервер управления AVP на mySQL и MSSQL. На MSSQL работает в несколько раз быстрее. Может, конечно, на mysql неправильно что-то написали, не знаю.
Также могу сравнить наши внутрение приложения на mssql и каше, архитектура приложений разная, данных в базе каше намного больше, разработкой на mssql руководил человек, знающий ее очень хорошо, тем не менее, приложение на каше работает быстрее.
Может это и не очень корректно, сравнивать приложения с разной архитектурой, но еще более некорректно сравнивать каше в той же архитектуре приложений, что и sql сервера. Так как каше как раз берет за счет другой архитектуры.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36997426
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В поддержку слов Блок А.Н. приведу несколько ссылок:
Интервью " Универсальные СУБД, способные решать специализированные задачи "

Universal NoSQL Engine (pdf)

Аналитические и технологические обзоры

PS: согласитесь удобно и выгодно, когда в одной СУБД совмещены возможности SQL , NoSQL и ООП .
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36998098
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я не знаю, сколько она там может обрабатывать запросов (Олег Оленин разгонял скорость до 80 тыс запросов в секунду на запись, но это нужно постараться)

Хм, а зачем на запись-то разгонять? Скорость записи лимитируется, в основном, скоростью seek на жестком диске - и примерно одинаковая для всех БД.

80000 - это или включен кэш на запись или данные записываются большими блоками или и то и другое :)
Оба случая - не интересны :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36998697
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Блок А.Н.Я не знаю, сколько она там может обрабатывать запросов (Олег Оленин разгонял скорость до 80 тыс запросов в секунду на запись, но это нужно постараться)

Хм, а зачем на запись-то разгонять? Скорость записи лимитируется, в основном, скоростью seek на жестком диске - и примерно одинаковая для всех БД.

80000 - это или включен кэш на запись или данные записываются большими блоками или и то и другое :)
Оба случая - не интересны :)
Действительно, не интересны. А если не то и не другое?
Посмотрите пример на Java для записи данных и проверьте лично.

Если нужно ещё быстрее (без объектных удобств), то вот Java-пример работы c СУБД Caché на уровне "ключ(и)/значение":
Пример работы с 3000000 "записями"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
// Демонстрационный пример производительности СУБД Caché при использовании MultiDimensional Storage API

import java.sql.*;
import com.intersys.mds.MDSNodeReference;
import com.intersys.mds.MDSSession;
import com.intersys.mds.MDSSessionFactory;
import com.intersys.mds.jni.MDSUtilsJNI;

class MDSDemo {

  public static void main(String[] args) {
    String namespc = "USER";
    String url = "jdbc:Cache://SPCHOST:1972/" + namespc;
    String user = "_SYSTEM";
    String password = "SYS";

    Connection jdbcConnection = null;
    try {
      Class.forName("com.intersys.jdbc.CacheDriver");
      jdbcConnection = DriverManager.getConnection(url, user, password);

      MDSSession session = MDSSessionFactory.createJNISession();
      session.connect(namespc, user, password);

      int start = MDSUtilsJNI.getCurrentMs();

      MDSNodeReference ref = session.createNodeReference("del.a");
      ref.kill(); //удаление данных
      ref.setSubscript( 1 , "a");
      for (int i =  1 ; i <=  3000000 ; i++) {
        ref.setSubscript( 2 , i);
        ref.set(i); // эквивалентно на сервере set ^del.a("a",i)=i
      }
      int end = MDSUtilsJNI.getCurrentMs();
      System.out.println("Запись данных за " + (end - start) /  1000  + " с. "
          + (end - start) %  1000  + " мс.");
      
      start = MDSUtilsJNI.getCurrentMs();

      long val =  0 ;
      ref.setSubscript( 1 , "a");
      for (int i =  1 ; i <=  3000000 ; i++) {
        ref.setSubscript( 2 , i);
        val += ref.getInt(); // эквивалентно на сервере set val=val+^del.a("a",i)
      }
      System.out.println("Сумма = " + val);

      end = MDSUtilsJNI.getCurrentMs();
      System.out.println("Чтение данных за " + (end - start) /  1000  + " с. "
          + (end - start) %  1000  + " мс.");

      session.end();
      
    } catch (Exception e) {
      System.out.println("Пойманное Исключение: " + e.getMessage());
    } finally {
      System.out.println("Завершение сессии.");
      try {
        if (jdbcConnection != null)
          jdbcConnection.close();
      } catch (Exception e) {
        System.out.println("Пойманное Исключение при отключении: "
            + e.getMessage());
      }
    }
  }
}
Результаты на моей машине (ТТХ те же):
Код: plaintext
1.
2.
3.
Запись данных за 8 с. 514 мс.
Сумма = 4500001500000
Чтение данных за 2 с. 312 мс.
Завершение сессии.

PS: Вы можете дополнительно поэкспериментировать с транзакциями.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37001891
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДействительно, не интересны. А если не то и не другое?

Судя по ссылке, это как раз скорость пакетной загрузки, да еще без транзакций, без проверки целостности, без индексации. Что, как раз, не интересно, тут скорость вообще от БД не зависит, только от скорости заливки данных на диск :)

Если у нас есть транзакция и БД живет не только в памяти, то все равно на одну запись уйдет один seek. Ну и считайте, сколько записей получим при времени seek в 4ms, например....

Выигрыш можно получить, если делать как в некоторых noSQL базах - на диск писать потоком список операций, а после краха накатывать его снова. Но это работает только если вся БД помещается в памяти и допустимо долгое восстановление. Ну и при этом есть и прочие проблемы.
Cache так не делает, это точно :)

В общем, обогнать физику как-то не получается :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37003378
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Судя по ссылке, это как раз скорость пакетной загрузки
Вам, наверное, не составит труда в подтверждение Ваших слов привести ссылку на документацию , а также раскрыть размер этих пакетов?
DPH3...да еще без транзакций...
Наличие 3000000 операций в одной транзакций не сильно замедляет скорость чтения/вставки. К тому же я предложил проверить лично работу с транзакциями и без них.
DPH3...без проверки целостности...
О какой проверке целостности может идти речь при работе с парой "ключ(и)/значение" (в терминах Caché - разрежённый массив или глобал)?
DPH3...без индексации...
Вы не заметили двух индексов: первый - строковый, второй - числовой ?
DPH3...В общем, обогнать физику как-то не получается :)
Кто-то поставил это под сомнение?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008625
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Выигрыш можно получить, если делать как в некоторых noSQL базах - на диск писать потоком список операций
Вы не поверите! Но в каше очень хорошо видно, как SQL распадается на микрооперации, и эти микрооперации пишутся потоком в журнал. И эти микрооперации как раз можно проводить самостоятельно.

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

80000/с это не скорость записи в базу. Это скорость передачи с внешним приложениям.
Если я не ошибаюсь, это именно была скорость единичного обмена.
Внутренняя скорость чтения и записи зависит от скорости диска, тут все гораздо проще.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008633
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или база будет в corrupted состоянии и самостоятельно уже не поднимется?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008636
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как вам на примере показать...

Есть бейсик для 1С. Где вроде как и есть какие-то объекты и какие-то операции, но на самом деле непонятно, как оно все это делает и почему тормозит. Теоретически, конечно, оно может работать и оптимально, а на практике не очень, и никакая физика не помогает

И есть объектно-ориентированный ассемблер (типа С++), и предположим, что он имеет альтернативные объекты и объекты.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008722
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymБлок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или ...
Запишется ничего, если эти операции в рамках одной общей транзакции. После перезапуска системы Caché откатит незавершённые транзакции.
Запишется часть, если это автономные операции вне рамок общей транзакции. Учитывая, что все операции атомарны, при записи объекта (или, если угодно, таблицы), состоящего из 10 полей, запишутся все 10 полей или ни одно.

an0nym... или база будет в corrupted состоянии и самостоятельно уже не поднимется?
База данных не будет в противоречивом состоянии, поскольку в Caché предусмотрены соответствующие технологии и механизмы :
Caché Data Integrity Guide

Caché High Availability Guide
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008852
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

я спрашиваю конкретно про вышеприведенные 80000/сек.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008941
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymservit,

я спрашиваю конкретно про вышеприведенные 80000/сек.
Я привёл примеры двух тестов: с использованием "Caché eXTreme dynamic objects" и "Multidimensional Data Storage API".
Ответ касался обоих.

PS: Вы, наверное, обратили внимание на закомментированные строчки кода в первом примере (без общей транзакции):
Код: plaintext
1.
2.
3.
4.
5.
...
//dbConn.startTransaction();
...
//dbConn.commit();
...
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37009253
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymБлок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или база будет в corrupted состоянии и самостоятельно уже не поднимется?

В журнал пишутся атомарные операции(в основном, set и kill), а не операции с объектами или sql.
1.Журнала два, операционный и постоянный, в базу данные записываются данные после записи в операционный журнал. В какой момент данные записываются в постоянный журнал - я не в курсе.
2.В журнале есть номер процесса и состояние транзакции, при неожиданном падении процесса (например, его закрыла операционная система) через короткое время каше детектирует ситуацию, проверяет журнал и при необходимости отменяет результат операций.
3.Запись строки таблицы - это один атом операции, т.е. обновить половину полей даже при сбое у вас не получится. Удаление/установка индекса это другая операция, отдельно установка и отдельно удаление.

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

Если у вас система упадет во время нежурналируемого update многих записей, то записано ровно по то место, до какого дошла программа. Если программа была в транзакции, то она будет откачена на момент начала транзакции. Т.е. высокоуровневую логику базы при отсутствии транзакций нарушить можно.

Низкоуровневую логику базы данных нарушить тоже можно, но для этого нужно либо особое везение + либо какие-то нечеловеческие издевательства (вариант - неисправная дисковая система). Исправить нарушение внутренней структуры можно.

Для примера По области начались ураганы... Но это не останавливает нашу клиентуру. Свет рубили и не раз! Но они снова и снова запускали Каше - упал сам сервер, целостность баз данных не нарушена.

Также, в каше есть горячие бэкапы и shadow/mirror.
Т.е. надежность не является проблемой каше.

-------
Приведенный пример с 80000 операций/с это, если не ошибаюсь, пилотный проект электронной биржи, либо чего связанного с биржей. Насколько я понял, транзакции конкретно в этом месте не использовались. Ну если у биржи кто-то выдернет UPS-ник, то я даже не знаю :-)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37014395
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Приведенный пример с 80000 операций/с это, если не ошибаюсь, пилотный проект электронной биржи, либо чего связанного с биржей. Насколько я понял, транзакции конкретно в этом месте не использовались. Ну если у биржи кто-то выдернет UPS-ник, то я даже не знаю :-)

Ну и зачем тогда сравнивать скорость bulk insert c скоростью атомарной записи в SQL-базах?
Я же и говорил, что 80000 в секунду - это без транзакций, скорее всего с write cache и без гарантий сохранности или хотя бы понимания, а что сохранилось при сбое железа.

На биржах, надеюсь, в реальности такое все-таки не используют :)
А писать данные в БД со скоростью потоковой записи на диск можно в почти любой реляционке. Только обычно не нужно :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37015337
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3На биржах, надеюсь, в реальности такое все-таки не используют :)Используют:
Технологии InterSystems для Extreme Transaction Processing (стр. 22-24)

TD Ameritrade
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37016572
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitИспользуют:

Ну, тут-то прямо говорится о поддержке транзакций, так что все нормально. Хотя, конечно, в основном маркетинговый bullshit.
Ну и нагрузки смешные, 250 000 операций в день - и зачем там нужно масштабирование?
А уж то, что необходима поддержка специалистов вендора для импорта данных по какому-то миллиону новых абонентов - звучит крайне странно.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37016862
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Ну и зачем тогда сравнивать скорость bulk insert c скоростью атомарной записи в SQL-базах?
Вы опять не поняли. Это совсем не скорость записей в базу. Это скорость записи данных из внешнего приложения. И я узнал об этом примере именно как о демонстрации тесноты интеграции каше и java, а не как о примере скорости каше.

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

DPH3Ну и нагрузки смешные, 250 000 операций в день - и зачем там нужно масштабирование?
А уж то, что необходима поддержка специалистов вендора для импорта данных по какому-то миллиону новых абонентов - звучит крайне странно. А теперь я не понял, вы о чем?
250000 в день это не то чтобы смешные нагрузки - запросы бывают разные, но как демонстрация скорости не канает, согласен. Я правда не понял, откуда эта цифра.

По поводу специалистов вендора я опять же не понял, о чем вы? Мне известно только о поддержке специалистов вендора при разработке новой системы и миграции старой системы в новую.
Но при чем тут количество абонентов?

Вообще меня в этой дискуссии раздражает роль суррогата маркетинговой службы ИС.
Несколько лет назад на нас косились "хаха-смотрите, придурки без SQL работают, ну и дикари" (хотя SQL в каше есть).
Так и сейчас приходится доказывать, что не верблюд.
Говоришь, что каше есть и у нее есть какие-то возможности и какие-то преимущества - смотрят, как будто прибыл с марса и рассказываю про марсианские яблони. Ну честное слово :-)
Все, что маркентинговая служба несет в массы воспринимается на уровне рекламы виагры.
Но мы есть, мы настоящие. И мы не виагра :-)
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогити с нереляционными(встраиваемыми) СУБД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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