Какое хранилище данных лучше в следующей ситуации?
В приложении-голосовалке для социальной есть AJAX скрипт, который вызывается около 10-50 раз в секунду. Он выполняет следующие действия:
— SELECT по первичному ключу
— REPLACE по уникальному индексу
— SELECT c JOIN из двух таблиц и сортировкой. При этом LIMIT 1. Если конкретно, то вот:
SELECT p.*, COUNT(g.id)>0 AS my_votes, p.region='{$reg}' AS from_my_region
FROM person AS p
LEFT JOIN guess AS g ON p.oid=g.person_oid AND g.author_oid=@myOid
WHERE p.age>0 AND p.oid<>@myOid AND p.gender<>'{$gender}'
GROUP BY p.oid
ORDER BY my_votes ASC, from_my_region DESC, points DESC, is_app_user DESC, RAND()
LIMIT 1
Я бы сформулировал так:
Из тяжелых операций на один REPLACE приходится один двух-табличный SELECT JOIN
В базе миллионы записей, и постоянно добавляются новые.
Все поля по которым идут отбор — проиндексированы.