September 28th, 2009

Ларикко Дайнин

Ехать ли на "Зилант"

Призадумался...
Как там с выходными днями? Кадется, 2-е ноября - день рабочий. Значит, пропускать учёбу. При том, какая компактная у нас программа, подумалось тут, что пропускать очень не хочется.
А что я при этом забыл на "Зиланте"? Ну, общение и всё такое...
Но если конкретно - вот концерт Джерри и его сказки - это пропускать будет жаль.
А в остальном... Учиться всё-таки надо, раз уж пошёл.
Work

Плата за абстракцию

Вот делают тут ребята CMS. Хорошую такую и логичную CMS, в которой можно описывать самую разнообразную логику устройства сайта, при этом не думая ни о каком SQL, думая только в терминах сущностей, из которых состоит сайт. Абстрагирование от конкретной БД, в которой всё хранится, берёт на себя ядро CMS.

Но вот бывает нужно сделать такую простую операцию как, скажем, увеличить текущее значение какого-либо счётчика. в общем, изменить значение, взяв за основу текущее. В SQL это можно было бы сделать одним запросом. Т.е. атомарно. А в CMS в интерфейсе её хранилища данных надо прописать операцию, которая сделает это. И то мы будем ограничены в выборе возможных действий (или придётся делать довольно неслабые навороты, чтобы дать пользователю писать формулу для изменения значения).

Грабли на этом пути нас поджидают: либо мы реализуем такое подмножество операций, которое есть у всех предполагаемых СУБД, либо придётся как-то правильно обрабатывать случай, если используемая СУБД не имеет нужной операции.

С точки зрения простоты реализации только и остаётся, что ставить на кусок данных блокировку, тащить данные в нашу программу, там изменять, записывать обратно, блокировку снимать. Итак эти блокировщики устроить, чтобы не забывать их все снимать не позднее окончания обработки запроса. Ну и смириться с тем, что для простой операции изменения одного числового поля мы сначала потащим данные из базы в приложение, там их обернём в принятый в нашем движке вид (в лучшем случае просто хэш, а то и, чего доброго, полноценный объект, а потом изменённые данные записывать обратно в базу. И счастье нам будет, если СУБД работает на том же компьютере. Ну ладно, путь и в другой виртуалке, ну прогуляются данные туда-обратно по внутренней петле TCP/IP...

Эх...