3.0.0-beta.20 • Published 2 months ago

collection-store v3.0.0-beta.20

Weekly downloads
50
License
MIT
Repository
github
Last release
2 months ago

#collection-store

It is simple and effective in-memory object store can be used both on browser and server side.

for usage please see tests.

features:

  • ttl: each item can have ttl;
  • indexes: collection can have multiple indexes;
  • schema: collection must have schema for all indexed items;
  • simple CRUD.
  • simple persistence
  • extensible persistence.
  • serialize/load schema within storage

find

можно добавить валидацию можно добавить интеграцию с удаленным хранилищем через хранилище можно добавить graphql можно добавить полнотекстовый поиск

можно использовать как структурированные логи для приложения

x чистить пустые индексные записи для Array интегрировать с filter и плотнее с lodash x уровень хранения сделать адаптером, а не отдельным классом кастомные индексы туда же можно включить сохранение в firebase

x предварительная обработка ключевых полей, функция, x ignoreCase x возможность строгой типизации коллекций с бонусами в ts - intellisence для индексов

[] поиск по нескольким ключам [] сложные индексы(более двух полей) [] fuzzy поиск по коллекциям

x index all fields x default adapter and list for Collection

[] интегрировать с google spreadsheet

сделать сервер для работы с библиотекой в смысле сдлать программу сервер

посмотреть lunr.js для поиска по индексам сделать индексы btree ... для поиска больше меньше и прочее

// https://medium.com/swlh/binary-search-tree-in-javascript-31cb74d8263b

// https://medium.com/swlh/key-value-pair-database-internals-18f52c36bb70 // https://medium.com/swlh/guide-to-database-storage-engines-2b188bd3e9e3

использоваь splay-tree https://github.com/w8r/splay-tree чел пишет алгоритмы сам использовать статический поиск без расширения staticFind

для поиска использовать FlexSearch.js

поддержка русского языка https://github.com/alex-shpak/hugo-book/issues/80

поиск: сделать дерево простых значений, как хэш таблиц для множественного поиска использовать два и более индексов проверять unique/non unique в узлах хранить ссылки на ключи, массив или один сделать сериализацию: сохранение и восстанровление индекса из/в JSON сделать индекс для lunr.js

сделать сериализацию и десериализацию rotate

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

  • проблемы с перекрестными обновлениями нужно отрабатывать как конфликты
  • можно придумать механизмавтоматической подгрузки данных в коллекцию по определенному запросу
  • вопросы с индексами: можно как-то придумать как лазить по вложенным структурам в typescript

x вспомнить где лежит библиотека filter

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

вводим типы ключевых полей

  • объекты сериализуются в строку, все
    • если(!) хранить в нативном формате
      • тогда надо будет чтобы как-то определять чем мы сериализовали
        • в виде пар значений
  • для поиска по интервалам и прочее
    • два основных типа:
      • строка
      • число
      • дата == строка и число
      • boolean = True/False или 1/0
    • нужны быстрые операции пересечения
      • это можно сделать на хэшах
        • преобразуем по известному алогритму в строку
        • пересечение
        • объединение
        • разница справа
        • разница слева

вставка элементов, с проверкой, на sparse если sparce, тогда нужно вставлять, если нет, то не нужно

xlist заменить на persistence adapter

x rotation сделать с переносом всех файлов в другую директорию, а не просто метаданных

сделать адаптер для redis

x путь к диреткории с файлами указывать, сейчас удален

проверка коллекции на консистентность: вдруг файл был удален или добавлен новый только для

!!! все операции обновления делать только над копиями данных, чтобы не изменять состояние базы без явного обновления...

counter для первичных ключей не обновляется!!!

  • сделать кэш для операций чтения

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

    • решено через получение ключа по id в tree
  • история изменений (audit) https://habr.com/ru/post/101544/
    • смотрим patch
    • берем копию данных
  • версия данных
    • для конкурентного изменения данных
    • выдавать ошибку версии
  • валидация и поля со значениями по-умлочанию
    • все можно сделать в одном через схему
  • загрузка и восстановление индексов после инициализации? посмотреть
  • сурогатные ключи и комбинированные уникальные и первичные с многими полями
    • просто выбираем ключи и ставим между ними ":"
    • задаем очередность полей ключа
    • это полезно для версионных структур данных
  • noupdate режим для коллекции
    • отключает удаление, и обновление записей

весионность: инкрементировать версию и записывать патч, в файл с историей

готово! версионность:

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

все структуры должны быть обнолены до вида похожего на firebase { id: первичный ключ, название файла data: data // может не иметь первичного ключа next_version: autoinc current_version: next_version - 1 created: timestamp updated: timestamp deleted: timestamp schema: validation schema --- схема по которой хранится запись history: { next_version: autoinc version: number // связаны c next_version schema: схема валидации записи на тот момент date: timestamp diff: }

}

полнотекстовый поиск https://github.com/lucaong/minisearch https://github.com/fergiemcdowall/search-index

платформа для базы данных https://github.com/Level/levelup сделать levelup down совместимым

!!! сделать адаптер для mem-fs, redis, mongodb, gitfs, firebase, firestore, googlesheet

3.0.0-beta.20

2 months ago

3.0.0-beta.19

2 months ago

3.0.0-beta.17

2 months ago

3.0.0-beta.18

2 months ago

3.0.0-beta.13

4 months ago

3.0.0-beta.12

4 months ago

3.0.0-beta.10

5 months ago

3.0.0-beta.3

5 months ago

3.0.0-beta.5

5 months ago

3.0.0-beta.4

5 months ago

3.0.0-beta.7

5 months ago

3.0.0-beta.6

5 months ago

3.0.0-beta.9

5 months ago

3.0.0-beta.8

5 months ago

3.0.0-beta.2

5 months ago

3.0.0-beta.1

5 months ago

3.0.0-beta.0

5 months ago

1.0.0

2 years ago

2.2.0

2 years ago

2.1.1

2 years ago

2.4.0

2 years ago

2.1.0

2 years ago

2.0.0-beta.11

3 years ago

2.0.0-beta.10

3 years ago

2.0.0-beta.9

3 years ago

2.0.0-beta.8

3 years ago

2.0.0-beta.7

3 years ago

2.0.0-beta.6

3 years ago

2.0.0-beta.5

3 years ago

2.0.0-beta.4

3 years ago

2.0.0-beta.2

3 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.3

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.0

4 years ago

0.1.1

4 years ago

0.0.15

4 years ago

0.0.16

4 years ago

0.0.14

4 years ago

0.0.13

4 years ago

0.0.12

4 years ago

0.0.11

4 years ago

0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago