Задать вопрос
Ответы пользователя по тегу SQL
  • Существует ли "база данных", в которой бы можно было сделать выборку N случайных записей из отфильтрованного по условиям набора?

    @zvorygin
    Тогда, если учесть, что запросы могут быть какими угодно, вам надо будет на каждый запрос читать всю таблицу хотя бы для того чтобы отфильтровать(хоть самописное у вас, хоть oracle, хоть mysql) - т.е. читать 5Гб (это самый медленный момент во всей системе). Если взять скорость последовательного чтения(а случайное чтени + SSD вам не помогут, как мне кажется), то время чтения будет порядка 5Гб/150МБс т.е. около 30 секунд. Если предположить что записи меняются редко, то можно все это дело дополнительно сжать(зависит от реальных данных) - хранить записи не фиксированной длины - возможно еще процентов 15(или больше) экономии выжмется - итого 25 секунд. Можно применить RAID и ускорить еще в пару раз(или в большее - в зависимости от реализации) - итого получаем 15 секунд на запрос. Никакие стандартные кеши при последовательном чтении не помогут, но можно попробовать просто забить всю свободную память кусками данных - и к ним обращаться не с диска - это дает еще 2Гб в памяти и, на вскидку экономию в 30-40 процентов. Итого, мне кажется, 10 секунд - довольно хороший гарантированный и достижимый результат на почти любых фильтрах и запросах. Если есть заранее известные данные о фильтрации, то можно пробовать как-то по-другому оптимизировать.
    Ответ написан
  • Существует ли "база данных", в которой бы можно было сделать выборку N случайных записей из отфильтрованного по условиям набора?

    @zvorygin
    Тогда, мне кажется, самое простое, быстрое и правильное решение - написать свое приложение (или сервис, если так удобнее), которое будет хранить все эти данные в сыром файле и за один проход выдавать нужный список. Тогда можно будет выполнять такие запросы "относительно быстро" - меньше чем за одну минуту, причем в независимости от того, сколько одновременно запросов будет выполняться.

    Причем выборка будет максимально честной. А вообще - можно взять на вооружение как интересную задачку для интервью)
    Ответ написан