Читал в сети, что ВКонтакте использует MySQL в роли основного хранилища. Да и многие другие проекты используют MySQL. Интересен вопрос в том, как это реализовано с технической стороны?
Не именно как у них, а то, как это вообще можно спроектировать, главные требования:
- Использование бесплатных баз данных
- Прозрачная работа с базой (т.е. скрипты не должны знать как и что там устроено и подключаться или к одному серверу всегда или к случайному в кластере)
- При выходе из строя одного сервера, чтобы работа продолжалась и данные не были бы утеряны
- Большая производительность (обрабатывалось очень большое кол-во запросов)
- Хорошая расширяемость (без отключения системы можно было бы добавить или убрать сервер)
При этом ограничения следующие:
- База относительно не большая (максимум 8 гигов, хотя не факт что может стать больше)
- Почти все таблицы связаны через внешние ключи
- Запросы относительно простые (наибольшее кол-во SELECT. Чуть меньше Insert и очень мало Update)
- Запросы примитивные и чаще всего затрагивают 1-2 таблицы
Вот собственно говоря вопрос: Какими средствами лучше это реализовать?
Сам склоняюсь к memcached + MySQL(InnoDB) + NDB, но вот с NDB что-то не ясно, многие плюются но не объясняя что и как, но часто мелькает информация что если база станет больше чем ОЗУ на каком-нибудь сервере, то всё загнется (к тому же так и не понял как там реализована система хранения, т.к. судя по документации всё хранится в памяти), а также нет поддержки внешних ключей, а без них будет довольно сложно жить. С репликацией тоже дело не особо понятное (там есть дублирование данные, но всё равно обращения идут только на master ).
Главная задача: надежное хранение +отказоустойчивость и приемлемая скорость при большой нагрузке (порядка 10к запросов в секунду). Кто что может посоветовать или дать ссылку на статью или документацию.