2009-05-20 6 views
1

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

Корпус 1. Данные, подлежащие хранению, требуют чрезвычайно быстрого поиска строк.
Корпус 2. Кэш-набор данных может быть большим. Я не хочу, чтобы взорвать использование памяти клиента, а также я не хочу, чтобы в сеть и доступ к диску вызовов, которые замедляют свое время обработки на стороне клиента

Решение:

Случай 1: I думаю, suffix tree/Tries предоставляет вам хорошее решение в этом случае.

Случай 2: Две проблемы рассмотреть здесь:

  1. Для хранения больших объемов данных с минимальным потреблением памяти
  2. Не делать какие-либо сетевые вызовы для доступа к любой информации, которая не доступна в кэше. Модель кэширования LRU - это одно из решений, о котором я могу думать, но это не мешает мне раздувать память.

Есть ли способ записать в файл и получить доступ без ущерба для данных (аспект безопасности)?

Сообщите мне, если какой-либо вопрос не ясен.

EDIT: Josh, Я знаю, что мои требования нереалистичны. Чтобы сузить мое требование, я ищу что-то, что хранится с использованием алгоритма LRU. Будет хорошо, если мы сможем иметь динамическую конфигурацию размера для этого LRU с максимальным лимитом. Это уменьшит количество вызовов, идущих в сеть/базу данных, и обеспечит хорошую производительность.

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

+0

Что вы имеете в виду под «быстрый поиск строки» - точное соответствие Струнный или шаблону соответствия?Если вам нужно найти элемент на основе точной строки, то хэш-таблица может это сделать. – Gandalf

+0

если у вас есть большая коллекция строк, вы все равно предпочтете хеш-таблицу? – pankajt

ответ

1

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

Ehcache

+0

Я не использовал Ehcache. Несколько вопросов: 1. Сохраняет ли он весь объем памяти на диске 2. Насколько безопасно хранить данные на диске – pankajt

+0

Это очень настраиваемый вариант. Вы можете установить объекты lifespans, тайм-ауты тайм-аута и количество объектов (или сколько памяти) для хранения до того, как он начнет записывать на диск [или, конечно, скажите, чтобы он никогда не записывался на диск]. – Gandalf

+0

Для кэширования на клиенте? Пожалуйста, объясни. – jro

0

К сожалению, я думаю, что ваши ожидания нереалистичны.

Недостаточное использование памяти, но также отсутствие вызовов по доступу к диску означает, что вам некуда хранить данные.

Кроме того, чтобы ответить на ваш вопрос о безопасности, есть no клиентское хранилище данных (при условии, что вы говорите о веб-приложении), которое является «безопасным». Вы можете зашифровать его, но это уничтожит ваши требования к скорости, а также потребует обработки на стороне сервера. Все, что хранится и отправляется от клиента, является подозрительным.

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

+0

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

Смежные вопросы