Некоторое время назад я подумал о новой системе статистики для нашего многомиллионного веб-сайта пользователя, чтобы регистрировать и сообщать о пользовательских действиях для наших клиентов.
Дизайн базы данных довольно прост, содержащий одну таблицу, с foreignId (200 000 различных идентификаторов), поле datetime, actionId (30 разных идентификаторов) и еще два поля, содержащие некоторую метаинформацию (только малые значения). Для других таблиц нет ограничений. Кроме того, у нас есть два индекса, каждый из которых содержит 4 поля, которые нельзя отбрасывать, поскольку пользователи получают тайм-ауты, когда у нас есть меньшие индексы. ForeignId является самым важным полем, так как каждый запрос содержит это поле.
Мы решили использовать SQL-сервер, но после реализации реляционная база данных не выглядит идеально подходящей, поскольку мы не можем вставлять 30 миллионов записей в день (она вставляет только, мы не делаем никаких обновлений), когда также делаем много случайных чтений в базе данных; потому что индексы не могут быть быстро обновлены. Эрго: у нас огромная проблема:-) Мы временно решили проблему, но
реляционная база данных, похоже, не подходит для этой проблемы!
Будет ли лучше база данных, например BigTable, и почему? Или существуют другие, более эффективные решения при решении таких проблем?
NB. На этом этапе мы используем одну 8-ядерную систему Xeon с памятью 4 ГБ и 32-разрядную версию Win 2003. Насколько я знаю, RAID10 SCSI. Размер индекса составляет около 1.5x размер таблицы.