Существуют ли какие-либо библиотеки или компоненты, которые обеспечивают хранение и быстрый поиск пользовательского контента?

StackOverflow https://stackoverflow.com/questions/2148711

Вопрос

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

Эталонной реализацией будет Facebook Инфраструктура для фотосъемки стогов Сена.

Важны следующие характеристики

  • Хранилище данных должно хорошо масштабироваться:добавление ресурсов должно быть прозрачным для приложения, использующего хранилище (похожий вопрос имел ответ, относящийся к Волдеморт из LinkedIn).
  • Возможность добавлять некоторые метаданные наряду с хранимыми данными.
  • Метаданные могут быть запрошены с хорошей производительностью (например,хранится в настраиваемом индексе, таком как Lucene / Solr).
  • Быстрый доступ на основе ключа и некоторый промежуточный уровень кэширования

Приветствуются любые рекомендации по библиотекам или фреймворкам, которые могут быть легко интегрированы в веб-приложение Java.

Обновить:спасибо вам за первые несколько ответов.Я должен более подробно остановиться на том, какого типа ответы ожидаются. Ответ Тобу, хотя и не связанный с java, очень хорош (только что проголосовал).Можно реализовать решение с комбинацией доступа к файловой системе и базе данных и добавить некоторый уровень кэширования между ними, но я считаю это пустой тратой времени, если кто-то более квалифицированный, чем я, уже разработал, внедрил и запустил лучшее решение.Что-то, основанное на решении с базовыми реализациями DB или JCR, хорошо подходит, но реализация другой инфраструктуры - это не то, что я хочу делать.

Это было полезно?

Решение

Мы получили хороший опыт работы с медиа-репозиторием Fedora Commons (http://www.fedora-commons.org/), который позволяет вам хранить медиаресурсы вместе с связанными с ними метаданными.У нас не было никаких проблем с масштабируемостью или настройкой, и не было трудностей с заменой базового уровня хранилища на тройное хранилище (если это было бы необходимо в вашем случае).Если вам нужно проиндексировать свои данные с помощью Solr, вы можете использовать предопределенное поле метаданных ("RELS-EXT") для хранения данных на основе XML.

Другие советы

МогилеФЫ это то, что использует LiveJournal.Хотя и не особенно Java.

Я чувствую, что ваши требования довольно близки к тому, что предоставляет база данных.Просто убедитесь, что дизайн таблиц соответствует вашим потребностям (например, вы могли бы размещать большие данные, такие как изображения, в отдельной таблице от метаданных).

Все ваши требования были бы учтены, включая уровень кэширования в базе данных (и вы могли бы иметь дополнительный уровень кэширования в своем приложении по мере необходимости, который, вероятно, использовался бы также для остальной части вашего приложения).

Кролик - апач является полностью соответствующей реализацией Content Repository for Java Technology API (JCR, указанный в JSR 170 и 283).Но у него есть некоторые проблемы с производительностью (по крайней мере, в версии 2-летней давности, которую я использую), лучший способ преодолеть их - реплицировать статические изображения на веб-сервер.(Используя WebDAV, davfs и rsync)

Это зависит от количественной оценки "большой и активной базы пользователей"...

80% веб-сайтов могли бы просто использовать подход без NoSQL-схемы, такой как y_serial:

y_serial.py модуль ::храните объекты Python с помощью SQLite

"Сериализация + постоянство ::в нескольких строках кода сжимайте и комментируйте объекты Python в SQLite;затем позже извлеките их в хронологическом порядке по ключевым словам без какого-либо SQL.Самый полезный "стандартный" модуль для базы данных для хранения данных без схемы."

http://yserial.sourceforge.net

Если фотографии и артефакты на одного пользователя сжаты менее чем на 2 М, производительность должна быть хорошей.

Для оставшихся 20% случаев использования можно легко импортировать данные из yserial в Cassandra, которая теперь принята Facebook, Digg и Twitter.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top