ru_java, posts by tag: logging - LiveJournal (original) (raw)
Спрашиваю потому что лень копать доки и делать свои ошибки.
Задача: хочу логировать некоторые события в монго, - запись типа (время,
название, ещё пара строковых полей).
Краевые условия:
1. запись должна быть чертовски быстрой (а с mongo это вроде так и есть),
2. Если пара тройка тысяч записей потеряется - фигня,
главное что бы логирование при ошибке не вставало намертво до перезагрузки
и не начинало сильно тормозить.
3. Дружба со Spring.
Рабочий пример:
01 Mongo m = new Mongo("localhost", 27017); 02 DB db = m.getDB("mydb"); 03 DBCollection collection = db.getCollection("myDbCollection"); 04 collection.insert(dbo);
Собственно мои вопросы:
1. Какая часть из этих строк должна быть в инициализации бина (сингдетона)
2. а какая в методе inserLogEntry
3. т.е. если у меня будет collection как singleton - и я буду дёргать у
него insert из разных ниток - это нормально?
4. Что будет если всё сдохнет (ну перезапустил я монго, например)?
5. нужно ли что то пересоздавать самому или монго сам переконнектится?
6. Если сервер mongodb недоступен - будет ли collection.insert(dbo) сильно тормозить?
7. log2mongo не предлагать.
8. Какие ещё могут быть проблемы с конкурренси и вообще любые другие проблемы?
upd:
1. 4-ре нитки, по 10 000 insert-ов, 965мс, 0.025мс на вставку.
2. строки 02 и 03 можно оставить как вне цикла, так и внести внутрь его, на производительность не влиеят.
3. На том же тесте, если строку 01 внести внутрь цикла, всё повисает нахен, пришлось перезагружаться.
4. С выключенной базой на 1 инсерт уходит 750миллисекунд, но это видимо настраивается.
upd2:
Аааааа!!!!!
После моих экпериментов повлешких рестарт машины Mongo отказался запускаться при старте,
хуже того, сервис постоянно был состоянии Starting, и даже остановить его стандартными средствами
было нельзя. Дело кончилось тем что я грохнул все файлы из директории с данными,
после чего она таки запустлился.
Стрёмно как то!!! (и да, лог пустой, что - почему - непонятно).