powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Производительность и транзакции в Cache и GlobalsDb (java globals API)
3 сообщений из 3, страница 1 из 1
Производительность и транзакции в Cache и GlobalsDb (java globals API)
    #38841000
TryCache
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Пишу приложение, работающее с обеими СУБД с использованием java globals API ( http://docs.intersystems.com/cache20131/csp/docbook/DocBook.UI.Page.cls?KEY=BXJV_globals#BXJV_globals_transact_transact ). У меня есть два потока выполняющих вставку данных. До данного момента вставлял данные с помощью connection.createNodeReference и далее node.appendSubscript и node.set. Насколько тяжеловесна операция createNodeReference? Могу ли я для вставки новой записи каждый раз ее вызывать? И я так понимаю, что данные на диск записываются после вызова node.close, это так? Дело в том, что мой код мог отработать, я даже закрыл программу, а диск может еще скрипеть секунд двадцать. Что в этот момент происходит?

Фактически приложение выполняет массовую вставку записей постоянно. В реляционных СУБД при вставке большого количества записей важно делать это пачками в рамках одной транзакции (например, одна транзакция на 1000 вставок). С java globals API та же ситуация? Если да, то как запускать разные транзакции из разных потоков? Судя по документации соединение разделяется между потоками.

И еще вопрос. Есть ли серьезная деградация производительности вставки при накоплении в одном из узлов нескольких сотен тысяч или миллионов узлов?
...
Рейтинг: 0 / 0
Производительность и транзакции в Cache и GlobalsDb (java globals API)
    #38841454
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TryCacheНасколько тяжеловесна операция createNodeReference? Могу ли я для вставки новой записи каждый раз ее вызывать?Если данные вставляются в один и тот же глобал, но в разные подиндексы, то, конечно, не сто́ит: разработчики ведь не зря разделили эти методы (createNodeReference, appendSubscript, setSubscript, set, ...).
К тому же при прочих равных, голые ссылки немного быстрее полных: Naked Global Reference .
TryCacheИ я так понимаю, что данные на диск записываются после вызова node.close, это так?Нет, не так. И это легко проверить: достаточно сразу после set поставить задержку и посмотреть в БД или вовсе убрать вызов node.close.
TryCacheДело в том, что мой код мог отработать, я даже закрыл программу, а диск может еще скрипеть секунд двадцать. Что в этот момент происходит? Two-Phase Write Protocol
TryCacheФактически приложение выполняет массовую вставку записей постоянно . В реляционных СУБД при вставке большого количества записей важно делать это пачками в рамках одной транзакции (например, одна транзакция на 1000 вставок). С java globals API та же ситуация?Нет, Caché ведь не реляционная СУБД, а потому лишена этих "ограничений".
К тому же при постоянной вставке (наверное, имелось в виду непрерывно?) лучше использовать одну транзакцию на запись (по умолчанию), иначе в случае отката есть риск потерять гораздо более чем одну записей.
TryCacheкак запускать разные транзакции из разных потоков? Судя по документации соединение разделяется между потоками.Документация: Considerations for Safe ThreadingThe single Connection instance may be used safely in multiple threads with these caveats:

источник Ничего не мешает использовать свой собственный Connection в каждом потоке, предварительно указав
Код: java
1.
ConnectionContext.setOption(ConnectionContext.THREADING_MODEL, ConnectionContext.THREADING_MODEL_THREAD_SPECIFIC);

TryCacheИ еще вопрос. Есть ли серьезная деградация производительности вставки при накоплении в одном из узлов нескольких сотен тысяч или миллионов узлов?Нет, потому и выбирают MUMPS (GT.M, MiniM, Caché, ...). К тому же это является стандартной схемой хранения данных для таблиц/классов в Caché.
Вы можете хранить вообще все Ваши данные в одном/двух глобалах и примеры тому были.
Затык может возникнуть в железе, в объёме данных, но это уже уровень Enterprise, для которого существуют ECP , Global Mappings (отображение части данных на разные бд/диски/сервера) ...
...
Рейтинг: 0 / 0
Производительность и транзакции в Cache и GlobalsDb (java globals API)
    #38841691
TryCache
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, спасибо за ответы!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Производительность и транзакции в Cache и GlobalsDb (java globals API)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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