Предположим, что мы разрабатываем Instagram с миллиардами пользователей. Мы разделяем таблицы фотографий в нескольких базах данных (в разных экземплярах / серверах / устройствах разделения), а в таблицах фотографий имеется столбец createdAt
. Теперь пользователь открывает домашнюю вкладку в приложении, приложение должно показать последние 20 фотографий (order by createdAt desc
) глобально (не локально) по таблицам фотографий в нескольких базах данных. Каким должен быть запрос SQL?
Мы должны разделить таблицу фотографий, потому что миллиарды пользователей будут делать сотни миллиардов фотографий. Мы не можем хранить и обслуживать сотни миллиардов фотографий в одной таблице в одной базе данных на одном сервере.
Скажем, у нас есть 100 серверов баз данных, одним из возможных решений является запрос select id from photo order by createdAt desc limit 20
к таблицам фотографий более 100 баз данных. сервера. Затем в нашем бэкэнде мы получаем 20 * 100 = 2000 строк фотографий и сортируем их по созданному в бэкэнде (Node.js, Java, Python, et c) и возвращаем только первые 20 строк.