Доступное клиентское хранилище

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

Я нашел несколько перспективных кандидатов, но я не уверен, какие лучшие варианты

  • Lawnchair: интерфейс к различным хранилищам адаптеров, имеет запросы и агрегаты, реализованные в виде плагинов http://brian.io/lawnchair/
  • TaffyDB: http://www.taffydb.com/
  • LocalstorageDB: запрашиваемый localstorage github.com/knadh/localStorageDB
  • Minimongo: реализация ephemeral mongo, используемая как кеш для Meteor (http://docs.meteor.com/#meteor_collection)

Существуют и другие менее оптимальные варианты:

  • HTML5 localstorage/sessionstorage (нужно создать слой запроса поверх этого... например, lawnchair или localstoragedb)
  • IndexedDB (совместимость с браузером)
  • Google gears (прекращено)
  • WebSQL (спецификация остановлена)

Мне было бы интересно узнать ваш опыт с этими параметрами/если есть другие, которые я пропустил

Ответ 1

Вы можете использовать jStorage в сочетании с jLinq

Ответ 2

Попробуйте мою библиотеку с открытым исходным кодом https://bitbucket.org/ytkyaw/ydn-db/wiki/Home. Он поддерживает IndexedDB, WebSQL и localStorage. Запрос - это стиль NoSQL, т.е. Запрос диапазона базового ключа индекса. Для множественного запроса индекса требуется использование комбинированного индекса или алгоритма объединения ключей. В настоящее время существует базовый интерфейс запросов к SQL, который со временем будет лучше.

Крупномасштабное веб-приложение, большинство из которых CRM, используют библиотеку в производстве.

Ответ 3

Я написал два простых API для работы с Storage API. Один из них - это оболочка, облегчающая работу как с локальным, так и с сеансовым хранилищем: https://github.com/chambs/minidb/

Что-то вроде:

minidb.local.set('name', 'Willian');

minidb.local.get('name'); //gives you "Willian"

minidb.session.set('userData', {id:333, name: 'Joseph'});

minidb.session.get('userData'); //gives that object

Другой - это пространство имен, основанное только для API-интерфейса localStorage (без сеанса). В основном вы можете добавить "строки", сгруппированные в пространства имен, чтобы вы могли разделить данные на основе этих пространств имен: https://github.com/chambs/zonjs

Что-то вроде:

zon('user').insert({name: 'Willian', email: '[email protected]'});

zon('user').del('8739874397494');

Где "пользователь" - это пространство имен, которое вы определили. Возможно иметь столько пространств имен, сколько хотите, для одного и того же источника/домена

Надеюсь, это поможет:)

Ответ 4

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

Что-то, что я узнал в этом процессе: Douglas Crockford JSON-js cycle.js разрешил мои проблемы с строкой при выполнении сохранения/перехода на двойную связь объекты.

Кто-то отправил вопрос о репетиции github lawnchair gizub, описывая ту же проблему, и избавил меня от многих головных болей. https://github.com/brianleroux/lawnchair/issues/105