Более 10000 разных файлов, и мне нужно брать 4 из них каждые 5 секунд? - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть база данных из 10 000+ различных файлов, и мне нужно каждые 4 секунды извлекать 4 случайных файла из этой базы данных.

Мне интересно, что вы предлагаете для архитектора.Я думаю об использовании плоского файла или, может быть, sqlite?Делать это через mysql будет очень-очень медленно?

Ответы [ 5 ]

2 голосов
/ 23 декабря 2010

Запуск только обобщенного подхода Процедура selectRandom() каждые 5 секунд будет слишком грязной.вместо этого запускайте selectRandomGroups() каждые 120 секунд.

selectRandomGroups() выполняется selectRandom() 120/5 раз при каждом выполнении.и сохраняет результирующие группы в некотором хранилище (кеше).

при следующем использовании grabRandomGroup() каждые 5 секунд, чтобы извлечь последнюю группу из кеша и удалить ее.

2 голосов
/ 23 декабря 2010

Просто поместите файлы в каталог с детерминированными именами (0.dat, 1.dat и т. Д.) И прочтите их напрямую.

B-дерево и кеширование в файловой системе позаботятся обо всем остальном. Это именно то, для чего оно было разработано.

0 голосов
/ 12 января 2011

Я думаю, из ваших комментариев, что ваши файлы хранятся в той же таблице.Почему что-то подобное будет слишком медленным?

SELECT * FROM files WHERE approved = 1 AND type = image ORDER BY RAND() LIMIT 4

И почему бы быстрее запускать скрипт каждые 24 часа, который выбирает 69120 файлов и записывает их в каталог или что-то еще?Но конечно, вы могли бы сделать это.Просто измените ограничение в приведенном выше запросе.

0 голосов
/ 23 декабря 2010

Почему бы просто не хранить ссылки на изображения вместо целых файлов изображений? Запрос, который возвращает 4 имени файла каждые 5 секунд, не должен сильно нагружать сервер MySQL. Конечно, меньше, чем установка и запуск другой СУБД, предположительно на том же сервере.

Предполагая, что это какой-то тип веб-сайта, вы можете загрузить его на пользовательские машины, генерируя случайные имена файлов с помощью javascript, а затем делать с изображениями все, что нужно.

0 голосов
/ 23 декабря 2010

Исходя из очень тяжелой реляционной базы данных, моя первая реакция - не рекомендовать системы баз данных типа "NoSQL". Но в этом случае кажется, что вам понадобится одна большая хеш-таблица. Я бы посмотрел на что-то вроде MongoDB или CouchDB. Вы можете увидеть различия здесь (http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid).

Еще одна вещь, на которую вы можете обратить внимание, - это хранить эту информацию в «облаке» с помощью Amazon S3 или чего-то подобного, если вы считаете, что вам нужно быстро масштабировать и у вас недостаточно емкости.

В противном случае идея файловой системы, отмеченная выше, будет работать также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...