tienda flash - KolMitE

tienda flash

tienda flash

noviembre 15, 2022 Software en General 0

tienda flash

Desarrollado por SQLite
Desarrollado por LevelDB
Desarrollado por RocksDB
Desarrollado por TypeScript
Módulos ES

Versión de MNP
npm (siguiente)
Acción de GitHub
Mecanografiado
Descargas
nodo

FlashStore es un almacenamiento persistente de valores clave con una API tipo mapa ES6 fácil de usar (compatible con Async y Sync), con tecnología de LevelDB y TypeScript.

tienda flash

Requisitos

  1. Node.js v10 o superior

Ejemplos

Prueba el siguiente comando

npm install
npm run demo

La función básica de la siguiente manera:

import { FlashStore } from 'flash-store'

const flashStore = new FlashStore('flashstore.workdir')

await flashStore.set(1, 'a')
console.log(`key: 1, value: ${await flashStore.get(1)}`)
// Output: 'a'

await flashStore.del(1)
console.log(`key: 1, value: ${await flashStore.get(1)}`)
// Output: undefined

Back-end compatible

back-end Tienda flash Instalar comando NPM
NivelDB v1.0 npm install [email protected]
SQLite v0.20 npm install [email protected]
medea v0.18 npm instalar [email protected] (obsoleto)
SnapDB v0.16 npm instalar [email protected] (obsoleto)
RocasDB v0.14 npm install [email protected]
NivelDB v0.12 npm install [email protected]

SnapDB y Medea quedaron en desuso debido a muchos errores desconocidos.

Referencia de la API

FlashStore

FlashStore implementa la API de mapas de ES6 estándar con la modificación Async, impulsada por async-map-like

/**
 * ES6 Map API with Async
 */
export interface AsyncMap<K = any, V = any> {
  [Symbol.asyncIterator]() : AsyncIterableIterator<[K, V]>
  size                     : Promise<number>

  clear   ()                 : Promise<void>
  delete  (key: K)           : Promise<void>
  entries()                  : AsyncIterableIterator<[K, V]>
  get     (key: K)           : Promise<V | undefined>
  has     (key: K)           : Promise<boolean>
  keys    ()                 : AsyncIterableIterator<K>
  set     (key: K, value: V) : Promise<void>
  values  ()                 : AsyncIterableIterator<V>
}

class FlashStore<K, V> implements AsyncMap<K, V> {}

FlashStoreSync

FlashStoreSync implementa la API de mapa estándar de ES6:

class FlashStoreSync<K, V> implements Map<K, V> {}
  1. Obtiene una API de sincronización a costa de que todos sus datos se mantengan en la memoria.
  2. Los datos se volverán a escribir de forma asíncrona en el disco para un almacenamiento persistente en segundo plano.
  3. El rendimiento de FlashStoreSync se puede esperar alto porque todo está en la memoria.

Documento

Ver documentos generados automáticamente

  • ECMAScript 6: Mapas – 2ality – JavaScript y más

Ver también

  1. Bases de datos Node.js: una base de datos integrada que utiliza LevelDB
  2. Cómo cocinar una base de datos de gráficos en una noche – LevelGraph
  3. Estilo JS de base de datos de gráficos para Node.js y el navegador. Basado en LevelUp y LevelDB.
  4. 浅析 BigTable 和 LevelDB 的实现

Problemas conocidos

  1. los gte y lte en options no trabaje la propiedad. (#4)

Historial de versiones

maestro v1.3 (12 de septiembre de 2021)

  1. Compatibilidad con módulos ES (#93)
  2. Eliminar predeterminado workdir en FlashStore constructor.

v1.0 (16 de agosto de 2021) LevelDB v7.0

Desarrollado por LevelDB

Compatibilidad con LevelDB v7.0.0.

v0.20 Abr 2020 SQLite como Backend

  1. Codificamos el tipo de clave para que sea string solo en esta versión.
  2. Decidimos probar better-sqlite3 ya que afirma que es muy rápido.
  3. Los otros suplentes (me encantaría intentarlo en el futuro si es necesario):
    1. Mecanografiado: sqlite
    2. Ensamblaje web: sql.js

v0.18 de febrero de 2019 – Medea como backend

Desarrollado por Medea

DESAPROBADO: debido a #79 #74 y también es muy inestable en producción según mis experiencias. (por ejemplo, pérdida de memoria y bucle de eventos de bloqueo)

  1. Cambiar de SnapDB a MedeaDown

Medea es una biblioteca de almacenamiento persistente de clave-valor que se ejecuta en todos los lugares donde se ejecuta Node.

“Es una implementación JS pura de leveldown y es casi igual de rápida”. — Enlace de @Raynos

“El envoltorio compatible con LevelDOWN para Medea realmente abre la posibilidad de reutilizar los módulos que ya se han creado en torno al ecosistema LevelUP”. — @kevinswiber enlace

Problemas conocidos: FlashStore 会写满磁盘的问题 #155

async function compact (store: FlashStore): Promise<void> {
  await store.size
  const db = (store as any).levelDb.db.db.db
  await new Promise((resolve, reject) => {
    db.compact((err: any) => {
      if (err) {
        return reject(err)
      }
      resolve()
    })
  })
}

v0.16 de mayo de 2019 – SnapDB como backend

Desarrollado por SnapDB

  1. Cambiar de RocksDB a SnapDB #45
  2. #50 ha sido arreglado. ADVERTENCIA: no use esta versión porque tiene problemas conocidos

v0.14 de mayo de 2019 – RocksDB como backend

  1. Cambiar de LevelDB a RocksDB #34

v0.12 de enero de 2019: LevelDB como backend

  1. Use LevelDB como backend para omitir la compilación al instalar.
  2. Usando los tipos oficiales de leveldb de @types/

v0.7 Ago 2018 – Nosql-LevelDB como Backend

  1. Utilice nosql-leveldb como backend para evitar errores de segmento.

v0.6 julio de 2018

  1. Actualizar a TypeScript 3.0

v0.4 junio 2018

1. API de refactorización para implementar ES6 Map interfaz

  1. Actualice la API a ES6 Map-como, la diferencia es que FlashStore es todo asíncrono.

2. Agregar FlashStoreSync como en memoria Caché de reescritura para Flash-Store

Agregar una nueva clase FlashStoreSync que es una carga completa en memoria Caché de reescritura para Flash-Store:

  1. escribe directamente a cacheperezoso escribe a store.
  2. Lee desde la memoria caché, nunca se pierde porque la memoria caché tiene los datos completos de la tienda que nunca caducarán.
  3. API de FlashStoreSync es lo mismo que el ES6 Map

v0.2 de septiembre de 2017

Versión de inicio, la API es similar a LevelDB.

Preguntas más frecuentes

P: ¿Cuál es la diferencia entre el flash-store y memory-card

Respuesta corta:

  1. flash-store es para guardar datos en el sistema de archivos local.
  2. memory-card es para guardar datos en un almacenamiento de red distribuido, se puede serializar/deserializar de forma segura con la carga útil mínima transferida por diseño.

Respuesta larga:

flash-store y memory-card todos están construidos por @huan, y todos siguen la API de mapas ES6.

flash-store está utilizando una base de datos de archivos locales sin SQL para maximizar el rendimiento, se puede usar como una base de datos local o un caché local para lo que quiera almacenar en caché desde otra API.

memory-card utiliza un archivo local para almacenar datos en formato JSON de forma predeterminada; sin embargo, admite métodos más distribuidos y puede serializarse/deserializarse de forma segura con la carga útil mínima para transferir los datos entre redes (por ejemplo, puede serializarse solo para incluir la redis config y luego deserializarlo para restaurar una instancia de MemoryCard con el mismo backend de datos). Aprende más de su repositorio aquí

Autor

Huan LI (李卓桓) [email protected]

Perfil de Huan LI (李卓桓) en StackOverflow

Derechos de autor y licencia

  • Código y documentos © 2017-ahora Huan (李卓桓)
  • Código publicado bajo la licencia Apache-2.0
  • Documentos publicados bajo Creative Commons

Idiomas





  • Mecanografiado
    57,4%

  • JavaScript
    35,8%

  • Caparazón
    6,8%

Por favor Comparte y Síguenos:
RSS
Follow by Email
Facebook
Twitter

Deja una respuesta