Так это и есть специфика вашей задачи! Блокировка - немного не то слово, это флаг, что данный deviceID нужно пропустить, но так как из очереди нам его вынуть нужно, то делаем очередь для ожидающих.
Ну а в чем проблема?! Вроде бы должно работать... А лучше поставьте себе виртуалку с линуксом, хотя бы для отладки. Про винды сказать ничего не могу, сам на маках и виртуалках :-)
Мне кажется, что постгрес легче, практически вообще не требует конфигурирования, ну мускул немного быстрее (хотя все очень относительно). Для джанги наверное постгрес лучше...
Ах, да!!! Как раз все эти навороты перестают работать в распределенных системах. Представим, что сообщений столько, что принимается решение разделить таблицу на несколько серверов например по алфавиту, вот здесь вам и придется все эти тригеры и хранимки убирать и внедрять в код, это и так не всегда тривиальная задача, а тут еще и тригеры и хранимки...
1) удалять сообщения не нужно, их нужно не покпзывать. Делаем отдельное полк deleted
2) select count(tatata) делает это по индексу, где и так он хранится.
3) lastmessage так вообще нужно хранить не в базе, а в памяти
Ну и собственно, когда у нас есть кеширование или ORM, то во многих случаях в базу не нужно будет лазить вообще.
Проблема с разными тригерами одна, они нагружают базу, иногда очень и очень сильно, особенно при операциях удаления, а еще, про них забываешь и они иногда могут творить чудеса... Я не настаиваю, я через хранимки и тригера прошел и если их можно не делать, их делать не нужно. Особенно начинает бесить, когда через два-три года работы базы неработающий до этого тригер вдруг начинает отрабатывать по какому-то условию, при этом и код и данные и условия уже давно не те. Вот тут и начинается зоопарк с откатом стогигабайтных баз, транзакционных логов, перезаливкой архивных данных, поиском проблемы и прочими батхертами и оверхедами с бдениями в праздничные ночи.
С хранимками ситуация ничуть не лучше, особенно, когда у вас распределенная система и некоторые таблицы пошардены на кучу инстансов.
Все относительно, это же почти конечный автомат, а там что последнее, что первое, все едино, но можно и первым пунктом. Да и думал всего минут 10, писал дольше, автору топика и проверять.
386DX: Ну, блин, согласен, всем сразу сэсэде, гигабиты, процессоры квантовыеб фибреканалы на реидах. Вот оно волшебство0то где... Как оные закупят, а производительность на месте останется - так уже и разбираться будут :-)
Лучше пусть collectd запустят и посмотрят что с сервером происходит, тянуть то должен наверное...
Ну и я бы нагрузочное тестирование сделал на предмет сколько же он отдать может - fio рулит.
brammator: Так, у нас ubuntu 14.04, multipath настроен по умолчанию, со стороны DS3400 настороено отдавать два виртуальных диска на один комп, два других на второй. Устройства мапятся в /dev/mapper/mpath1-XXXXX /dev/mapper/mpath2-XXXXX
А некоторые и на демоплатах останавливаются, благо некоторые дешевле грязи и негабаритные и для 3-5 штук свое производство иногда накладно... Как раз по этому пути идут STlabs и NXP... У моторолы обычно дороговато выходит (хотя все относительно)...