Какова подходящая СУБД для хранения, NoSQL, для кэширования ответов веб-сайта? - PullRequest
1 голос
/ 17 ноября 2011

Мы находимся в процессе создания внутреннего приложения веб-сервисов RESTful на основе Java, которое предоставляет доменные данные в формате XML.Мы хотим дополнить архитектуру и повысить производительность, используя хранилище кеша.Мы рассчитываем разместить кеш на отдельных, но размещенных серверах, а поскольку веб-сервисы являются Java / Grails, то для кэша будет идеальным Java или HTTP API.

При поступлении запросов уникальные URI и их ответыбудет кэшироваться с использованием простого соглашения ключ / значение, например ...

KEY                                            VALUE
http://prod1/financials/reports/JAN/2007   --> XML response of 50Mb
http://prod1/legal/sow/9004                --> XML response of 250Kb

Значения ответа для одного запроса могут быть довольно большими, возможно, до 200 МБ, но могут быть такими же маленькими, как 1 КБ.И количество запросов в день мало;не более 1000, но в среднем 250;у нас нет большого количества потребителей;опять же, это внутреннее приложение.

Мы начали рассматривать MongoDB как потенциальное хранилище кеша, но, учитывая, что MongoDB имеет максимальный размер документа 8 или 16 МБ, мы не чувствовали, что он подходит лучше всего.

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

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Инженерная команда Twitter только что написала о своем проекте SpiderDuck, который делает что-то похожее на то, что вы описываете. Они используют Cassandra и Scribe + HDFS для своих бэкэндов.

http://engineering.twitter.com/2011/11/spiderduck-twitters-real-time-url.html

1 голос
/ 17 ноября 2011

Как я понимаю ваш вопрос, вы в основном хотите кэшировать файлы , т. Е. Вам не нужно понимать содержимое файлов, верно?

В этом случае вы можете использовать MongoDB GridFS для кэширования XML-файла. Таким образом, вы можете плавно передавать файл в базу данных и из нее. Вы можете использовать URI в качестве «имени файла», и это должно сработать.

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

0 голосов
/ 14 июля 2015

Самое простое решение здесь - просто кэшировать эти фрагменты данных в файловой системе. Вы можете использовать tmpfs, чтобы убедиться, что все находится в основной памяти или любой нормальной файловой системе, если вы хотите, чтобы размер вашего кэша был больше, чем у вас есть память. Не волнуйтесь, даже в последнем случае ядро ​​ОС будет эффективно кэшировать все, что часто используется в основной памяти. Тем не менее, если вы используете Linux, вы должны удалить старые файлы через cron.

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

...