Vladimir
Да, именно
Ohar
Ну и что тут сложного?
Ohar
Это просто писать долго
Vladimir
Слишком много писать да
Vladimir
Поэтому вместо это сохраняют версию схемы
Ohar
Но и то по первому разу
Ohar
Версию схемы?
Vladimir
Да, в базе записана текущая версия схемы
Vladimir
Берется версия из базы и версия из кода
Vladimir
И выполняются все миграции между ними
Ohar
Ок, ты проверил, она не та, которая нужна, твои действия?
Ohar
Ну то есть у тебя всё равно написан миллион скриптов миграций
Vladimir
Да, но по крайней мере там код который реально нужно выполнять
Ohar
не понял твою мысль
Ohar
а бывает другой код?
Vladimir
Если проверять по одному полю, то будет много лишней работы
Ohar
для меня или машины?
Vladimir
Например, когда ты в реальности добавил 10 полей за раз
Ohar
Для меня работы не меньше, чем скрипт миграции написать
Ohar
а машинное время оно для того и создано чтобы работу выполнять
Vladimir
Тем более, поля могут зависетб друг от друга
Vladimir
И проверять их нужно в определенном порядке
Ohar
типа foreign key?
Vladimir
Нет
Ohar
а как?
Vladimir
Допусти мы хотим добавить поле A, в него прописать какое то значение по дефолту
Ohar
так
Vladimir
Затем мы хотим добавить поле B, и прописать в него по дефолту то же, что и в A
Ohar
так
Vladimir
Соответственно, поля нужно всегда проверять именно в таком порядке
Vladimir
И порядок этот поддерживать руками
Ohar
Ну а в скриптах миграции как-то решена эта проблема?
Vladimir
В том что каждая миграция пишется отдельно и потому не трогается, и все они пишутся в конретном порядке
Ohar
Ну ты проверки тоже пишешь в каком-то порядке
Ohar
И тоже отдельно — по версиям приложения
Ohar
Разве нет?
Vladimir
Просто создается много дополнительных состояний, которые нужно проверять
Vladimir
Например, проверяешь, что есть поле B, но нет поля A
Vladimir
Хотя в реальности если есть B, то A уже должно быть
Vladimir
Но в принципе можно сделать примерно похожее поведение
Vladimir
Если считать что новое поле=миграция
Dmitry
грубо говоря эти скрипты выполняются по порядку
Dmitry
накатывая все изменения на базу исторически
Dmitry
и тогда ты получаешь последнюю версию
Dmitry
без потери данных
Dmitry
и тогда можно обновляться с любой версии на любую нажал я npm update myapp
Dmitry
и получил в preinstall апдейтики
Dmitry
я пока так планирую
Dreamerinnoise
ну как вариант, но хотелось бы в более сжатом виде, так сказать для чайников :)
http://stackoverflow.com/questions/25568613/node-js-event-loop Допустим, если для чайников
Ale
Вам скорее всего не нужен, но есть такая штука как event sourcing (типа как redux на клиенте). Там достаточно просто удалить все данные, кроме ивентов и рестартануть ивенты
Ale
А так запилите коллекцию с миграциями, куда пишите последнюю версию схемы. Скрипт запуска миграций такой: взять последнюю версию из базы, взять из папки все более новые миграции и накатывать по одной
Ale
В миграцию есть смысл добавлять две команды - up и down. Если потом придётся откатывать
Andrew
http://stackoverflow.com/questions/25568613/node-js-event-loop Допустим, если для чайников
как евентлуп работает я знаю. меня интересует как многопользовательские стейты разруливаются
Anonymous
выносятся в отдельные микросервисы, с возможностью блокировки операции записи
Evgeny
Я, кажется, понял. Чувак, а ты знаешь как работают замыкания?
Ohar
да, электрические
Vitaliy
Andrew
Можешь ещё раз вопрос сформулировать?
вопрос в следующем - в пыхе когда приходит коннект от браузера, хедеры всякие, сам реквест, будь то гет или пост или что еще, скрипт отрабатывает, отдает результат и завершается, с полной очисткой памяти. поэтому искаропке в пыхе нет и не бывает никакого стейта, каждый раз приходится с клиента куку слать, парсить ее, сессию из файла или еще откуда таскать и прочие ужосы. в ноде все иначе, плюс коннект может не обрываться, в частности для СПАхи с кучей аякса это вообще гут. Плюс пока процесс крутится, он хранит весь стейт. Т.е. вот ты запустил node index.js допустим и доколе скрипт не завершит выполнение всех-всех-всех операций либо не крашнется, стейт сохраняется, а если мы в скрипте запустим веб-сервер, который слушает порт, то все, пока скрипт не крашнется или по CTRL-C Или как еще не отвалится, стейт хранится. При этом на порт лосятся клиенты с разных браузеров, т.е. один и тот же скрипт обслуживает кучу разных запросов. Я нутром чую, что для каждого отдельного коннекта стейт хранится отдельно, иначе это была бы вакханалия. Вопросов два - евент луп единый для всех коннектов или тоже по лупу на каждый коннект? И насколько сильно изолированы стейты, могут ли они сообщаться с ведома скрипта?
Дима
Я, кажется, понял. Чувак, а ты знаешь как работают замыкания?
Владимир
есть общий стейт - это все переменные в скрипте
Владимир
а есть стейт реквеста - он в обработчике
Andrew
т.е. я правильно понимаю что на потоке единый стейт на все коннекты?
Владимир
например, если ты делаешь скрипт var players = []; app.post(‘/addPlayer’, (req,res)=>{ players.push[req.body.name] }) то в players будет общий стейт
Владимир
и поток один
Andrew
т.е. любой коннект в потенциале может получить доступ к этому общему стейту?
Kons
Что такое стейт? Есть переменные и есть их область видимости. Обработчик запроса — функция. Всё, что было в функции, остаётся в функции.
Andrew
стейт это все переменные запущенного скрипта
Andrew
вообще все
Ohar
Он на то и общий какбэ
Andrew
понял, мерси
Andrew
хотя одну штуку не догоняю я еще
Andrew
вот 100 бразуеров ломятся на порт
Andrew
т.е. 100 коннектов имеем
Andrew
и для каждого надо сходить в бд
Andrew
т.к. все асинхронно и евент луп
Andrew
непойми когда что отработает