Comments 26
Библиотека выделена отдельным модулем:
https://github.com/tshemsedinov/node-mysql-utilities
https://npmjs.org/package/mysql-utilities
https://github.com/tshemsedinov/node-mysql-utilities
https://npmjs.org/package/mysql-utilities
Замечательная идея и удобная реализация, всячески поддерживаю.
Но без тестов пользоваться этим будет только совершенно безответственный разработчик.
Но без тестов пользоваться этим будет только совершенно безответственный разработчик.
В каком смысле без тестов? Я тестирую, хотите — тестируйте сами )
В смысле в репе нет тестов, дабы проверить у себя ожидаемое поведение.
А топику плюс.
А топику плюс.
Тут так просто у себя и не протестировать, это нужно разворачивать MySQL, создавать в нем БД с определенной структурой, для тестирования, заполнять ее тестовыми данными и потом над этой БД выполнять тесты. Каждый раз при запуске БД нужно приводить в первоначальное состояние. У меня это развернуто и настроено, имеет ли смысл разворачивать тесты каждому разработчику отдельно? Возможно, со временем, можно настроить Travis для этого.
Вышла версия 0.0.4 и появился очень нужный функционал: события, чтоб прицепиться на результат любых запросов и для выявления долгих запросов. Потом можно писать в лог или иначе сигнализировать. Пример:
// запрос, исполняемый дольше этого значения, будет генерировать событие 'slow'
connection.slowTime = 100; // значение в миллисекундах, по умолчанию 2000
connection.on('query', function(err, res, fields, query) {
console.dir({onQuery:{err:err, query:query.sql}});
});
connection.on('slow', function(err, res, fields, query, executionTime) {
console.dir({onSlow:{err:err, executionTime:executionTime, query:query.sql}});
});
а как это красоту с pool'ом использовать? потому как один conn в node,js не трендово
Берете node-mysql, делаете пул конекшенов, как там на странице написано, потом ко всем конекшенам применяете примешивание (одно или оба): mysqlUtilities.upgrade(connection); mysqlUtilities.introspection(connection); После чего можно юзать все перечисленные функции.
хорошо, если конекшен из пула отвалился от мускла, и пул его пересоздал, что тогда?
ps. тем более пул не создает сходу максимум конекшенов, а открывает их по мере необходимости
ps. тем более пул не создает сходу максимум конекшенов, а открывает их по мере необходимости
не, можно конечно повесить на
pool.on('connection', function(connection) {
//bla-bla-bla
});
надо только посмотреть как он ведет себя при реконекте
pool.on('connection', function(connection) {
//bla-bla-bla
});
надо только посмотреть как он ведет себя при реконекте
Именно, если что-то не пойдет — пишите, исправим.
та, «пойдет не так»… уже на продакшене!
А протестировать до продакшена нельзя или как всегда, на вчера? )
на продакшене и протестится :)
а почему пул не напрягали, неужели через один конекшен шпарите?
а почему пул не напрягали, неужели через один конекшен шпарите?
Пока проект, в котором это используется, только в разработке, еще нет нагрузок. Но я не вижу причин, почему это не должно работать на больших нагрузках, конекшены одинаковые, что в пуле, что так. Я предлагал это в драйвер вставить, в конструктор конекшены, чтобы была опция драйвера, порождать конекшены сразу с примесями этих утилит.
нет, в констрактор конекшена как раз лезть не стоит, imho. может connection.upsert лучше назвать connection.replace?
UPSERT это общепринятый устоявшийся термин, он давно используется в различных библиотеках-обертках для реляционных БД, кроме того, в родных средства доступа к MongoDB и SQL Azure, и означает UPDATE or INSERT — изменение записи в случае, если она есть и вставка новой, если записи до этого не существовало. Совершенно другое значение имеет REPLACE — это синоним UPDATE — замена и изменение.
в терминах mysql, replace — это как раз и есть " изменение записи в случае, если она есть и вставка новой, если записи до этого не существовало".
Это нестандартный SQL-оператор, в других SQL-ных СУБД он заменяет подстроку в строке. Само слово REPLACE имеет известный смысл, совершенно не сочетающийся с созданием новых записей, почему вдруг ЗАМЕНА должна создавать что-то а не модифицировать.
функция replace и в mysql заменять подстроку в строке, но т.к. либа исключительно под mysql, я и предложил назвать метод более привычным в терминах mysql оператором. ну нет, так нет, теоретически-то пофигу
У нас такие же либы готовятся к другим СУБД, чтоб интерфейс был одинаковый.
в общем, посмотрели мы, со стримами не работает, синхронные лупы внутри, три обязательных параметра в функции (sql, callback не прокатывает) и т.д.… короче написали своё, спасибо за вдохновение :)
Ну спасибо это много, а вот указать, где именно синхронные лупы — в самый раз. Параметр values исправил на опциональный. Со стримами что именно не работает?
Так что с пулами не разобрались?
С пулами вроде все ж хорошо работает, вот даже кто-то пример положил. Можно применять миксин к любому соединению, хоть к одиночному, хоть входящему в пул: github.com/tshemsedinov/node-mysql-utilities/issues/5
Sign up to leave a comment.
Удобства на улице для MySQL драйвера в Node.js