Здравствуйте, Дельгядо Филипп, Вы писали:
C>>С базой данных — это тупик. Думайте про умные распределенное файловое хранилище. Можно прочитать про то, как устроен LiveJournal: ДФ>Гм, а почему с базой данных — тупик? Разумеется, одна глобальная БД с действительно большим объемом данных не справиться (вернее, слишком дорого будут стоить лицензии со всеми partioning'ами). Но почему в качестве элемента распределенной системы лучше использовать файловую систему, а не БД — мне не очевидно.
Потому, что лучше файловой системы для отдачи файлов по сети — пока ничего не придумали.
ДФ>Конечно, partioning и методы ребалансинга между отдельными узлами придется делать самому, но хотя бы не будет проблем с организацией HA, да и обновления будет выглядеть проще.
А теперь подумай — если ты уже сам делаешь partitioning и HA, то почему не сделать еще один шаг и не использовать файловую систему вместо блобов в БД?
Точнее, я бы использовал комбинированую схему — сделал бы центральную БД, где хранятся все блобы (удобно для бэкапа и т.п.) и систему, которая распихивала бы блобы по узлам-серверам. Таким образом, очень легко обеспечить HA — упадет одна нода, так просто перераспределяем ее данные на работающие узлы.
ДФ>Сравнения производительности работы с файлами и с блобами для приличных БД я никогда не видел, а так как наши тесты БД упирались явно в железо, то не понятно, с чего файловая структура должна быть существенно быстрее, а вот ее поддержка будет не проще.
Сравнивал — разница в десятки раз. Lighthttpd забивает стомегабитный канал статическими файлами даже не напрягаясь (уровень загрузки процессора близок к 5%-10% на каком-то P4), тут еще сказывается его асинхронная неблокирующаяся натура. Tomcat/Jetty на таких нагрузках съедает весь процессор.
ДФ>Впрочем, возможно, я действительно что-то не понимаю, проектов класс LJ делать не приходилось. ДФ>Да и вряд ли в данном случае речь идет о проекте с нагрузкой порядка десятков тысяч транзакций в секунду. А тысячи транзакций можно реализовать и через блобы на какой-нибудь DB2 Express C.
Сотни транзакций в секунду, кстати, на определенных видах приложений получить можно легче легкого даже с небольшим числом клиентов.
ДФ>Но вот про кэш подумать стоит (про memcached, скорее всего).
Memcached лучше всего подходит для сколь-либо динамических данных (типа комментариев в блогах). Для статических данных он только вредить будет.