https://github.com/Level/levelup

A node.js wrapper for abstract-leveldown compliant stores

一个为实现抽象leveldown兼容存储器的node.js封装器

levelup

Introduction

Fast and simple storage. A Node.js wrapper for abstract-leveldown compliant stores, which follow the characteristics of LevelDB.

快速简单存储。一个为实现抽象leveldown兼容存储器的node.js封装器,遵循了LevelDB的特性

LevelDB is a simple key-value store built by Google. It's used in Google Chrome and many other products. LevelDB supports arbitrary byte arrays as both keys and values, singular getput and delete operations, batched put and delete, bi-directional iterators and simple compression using the very fast Snappy algorithm.

LevelDB是一个Google构建的简单的键值存储。在Google Chrome和其他产品中被使用。LevelDB支持抽象字节数组作为键和值,单一getput delete操作,批处理的put 和delete操作,双向迭代和使用快速Snappy
算法进行简单压缩

LevelDB stores entries sorted lexicographically by keys. This makes the streaming interface of levelup - which exposes LevelDB iterators as Readable Streams - a very powerful query mechanism.

LevelDB存储按照键的字母顺序进行排序的条目。这构造了levelup的流接口-暴露了levelup作为可读流的迭代器-一个十分有效的查询机制

The most common store is leveldown which provides a pure C++ binding to LevelDB. Many alternative stores are availablesuch as level.js in the browser or memdown for an in-memory store. They typically support strings and Buffers for both keys and values. For a richer set of data types you can wrap the store with encoding-down.

最普遍的存储器是提供了存C++链接到LevelDB的leveldown。有很多交替存储是可用的,如在浏览器中的level.js,或者是内存存储的memdown.他们的键和值基本上之处字符串和Buffers类型。对于更丰富的数据类型集,你可以使用encoding-down来封装该存储

The level package is the recommended way to get started. It conveniently bundles levelupleveldown and encoding-down. Its main export is levelup - i.e. you can do var db = require('level').

level包是推荐的入门方法。它有着levelupleveldownencoding-down三部分。

主要的接口是level-比如使用var db = require('level')

Supported Platforms支持平台

We aim to support Active LTS and Current Node.js releases as well as browsers. For support of the underlying store, please see the respective documentation.

我们的目的是支持可用的LTS和当前的node.js以及浏览器。为了支持下面的存储,请查看相应的文档

Usage使用

If you are upgrading: please see UPGRADING.md.

如果更新:请看UPGRADING.md

First you need to install levelup! No stores are included so you must also install leveldown (for example).

首先安装levelup!没有包含的存储器,所有还要安装leveldown

$ npm install levelup leveldown

All operations are asynchronous. If you do not provide a callback, a Promise is returned.

所有操作都是异步的。如果你么有提供回调函数,那么将返回一个Promise

var levelup = require('levelup')
var leveldown = require('leveldown') // 1) Create our store,创建存储器
var db = levelup(leveldown('./mydb')) // 2) Put a key & value,存储键name&值levelup
db.put('name', 'levelup', function (err) {
if (err) return console.log('Ooops!', err) // some kind of I/O error // 3) Fetch by key,通过键name获取值levelup
db.get('name', function (err, value) {
if (err) return console.log('Ooops!', err) // likely the key was not found // Ta da!
console.log('name=' + value)
})
})
 

API

详细内容看本博客Level/levelup-2-API

Promise Support

levelup ships with native Promise support out of the box.

带有本地Promise的levelup支持开箱即用

Each function accepting a callback returns a promise if the callback is omitted. This applies for:

每一个接受回调函数的函数,在回调函数被省略时返回promise。其应用在:

  • db.get(key[, options])
  • db.put(key, value[, options])
  • db.del(key[, options])
  • db.batch(ops[, options])
  • db.batch().write()

The only exception is the levelup constructor itself, which if no callback is passed will lazily open the underlying store in the background.

唯一的特例是levelup自己的构造函数,如果没有回调函数将懒得在后台打开底层的存储器

Example:

var db = levelup(leveldown('./my-db'))

db.put('foo', 'bar')
.then(function () { return db.get('foo') })
.then(function (value) { console.log(value) })
.catch(function (err) { console.error(err) })

Or using async/await:

const main = async () => {
const db = levelup(leveldown('./my-db')) await db.put('foo', 'bar')
console.log(await db.get('foo'))
}

Events事件

levelup is an EventEmitter and emits the following events.

Event Description Arguments
put Key has been updated key, value (any)
del Key has been deleted key (any)
batch Batch has executed operations (array)
opening Underlying store is opening -
open Store has opened -
ready Alias of open -
closing Store is closing -
closed Store has closed. -

For example you can do:

db.on('put', function (key, value) {
console.log('inserted', { key, value })
})

Extending

A list of Level modules and projects can be found in the wiki. We are in the process of moving all this to awesome.

在wiki中可以找到一个级别模块和项目列表。我们正在把这一切变得更棒

Multi-process Access

Stores like LevelDB are thread-safe but they are not suitable for accessing with multiple processes. You should only ever have a store open from a single Node.js process. Node.js clusters are made up of multiple processes so a levelup instance cannot be shared between them either.

像LevelDB的存储器是线程安全的,但是当访问多进程时它是不适用的。你应该只从单Node.js进程打开该存储。Node.js集群由多进程组成,所以levelup实例也不能够在他们之间共享

See the aformentioned wiki for modules like multilevel, that may help if you require a single store to be shared across processes.

有关multilevel之类的模块,请参阅规范的wiki,如果您需要跨进程共享单个存储,这可能会有所帮助。

 

Level/levelup-1-简介的更多相关文章

  1. Level/levelup-2-API

    https://github.com/Level/levelup Special Notes What happened to db.createWriteStream() levelup(db[, ...

  2. 超实用压力测试工具-ab工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...

  3. Jtree (节点的渲染+资源管理器)

    我们的还是自定义的Jtree的类: package jtree.customNode; import java.io.File; import javax.swing.JTree; import ja ...

  4. jtree(选择框)

    jtree一般的用法是: 1. 展示电脑中文件的层次结构,如图所示. 具体的代码: package jtree; import java.io.File; import javax.swing.JTr ...

  5. RING0,RING1,RING2,RING3

    Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普 ...

  6. Vue2 实现树形菜单(多级菜单)功能模块

    结构示意图 ├── index.html ├── main.js ├── router │ └── index.js # 路由配置文件 ├── components # 组件目录 │ ├── App. ...

  7. ab压测工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...

  8. express操作数据库

    Express 首页 入门 使用指南 API 中文手册 进阶话题 有用的资源 集成数据库 为 Express 应用添加连接数据库的能力,只需要加载相应数据库的 Node.js 驱动即可.这里将会简要介 ...

  9. ab(http)与abs(https)压测工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...

随机推荐

  1. Asp.Net 之Jquery知识点运用

    1.先把要用的body内的代码写好. <div id="ulBox"> <h3>下面的Ulid为"ulList1"</h3> ...

  2. veloctiy入门

    什么是velocity? velocity是一个基于Java的模板引擎.你可以使用它来预定义模板,并且对模板进行数据渲染,从而动态生成相应的文本.它如同JSP一样经常被使用在MVC分层架构当中,充当V ...

  3. JAVA基础之——JDK分析io、nio

    在哪儿:jdk\jre\lib\rt.jar package java.io;   package java.nio; 1 分类 1.1 IO 持久化序列化对象并压缩步骤 new FileOutput ...

  4. SSO单点登录实现原理

    SSO单点登录实现原理 只是简要介绍下基于java的实现过程,不提供完整源码,明白了原理,我相信你们可以自己实现.sso采用客户端/服务端架构,我们先看sso-client与sso-server要实现 ...

  5. Hello,world的几种写法!

    这是我的第一篇文章!开个玩笑~~“你知道回字的四种写法吗”? printf("Hello,world!"); cout<<"Hello,world!" ...

  6. JavaScript中map函数和filter的简单举例

    JavaScript的数组迭代器函数map和filter,可以遍历数组时产生新的数组,和python的map函数很类似 1> filter是满足条件的留下,是对原数组的过滤:2> map则 ...

  7. Python交互式编辑器ipthon notebook jupyter

    简介 IPython NoteBook(jupyter)是一个综合的交互式编程环境,比原本python命令进入的交互式环境要强大很多,总之就是炫酷加实用,浏览器中写Python代码,访问源端linux ...

  8. Java多线程学习笔记(一)

    一 概述 一个进程只有一个至少会运行一个线程,Java中同样存在这样,在调用main方法的时候,线程又JVM所创建. package link.summer7c.test; public class ...

  9. javascript进行百度换肤 和显示隐藏一个窗口的操作

    简单的运用javascript来进行百度换肤的操作 <!DOCTYPE html> <html lang="en"> <head> <me ...

  10. iOS设计模式 - 外观

    iOS设计模式 - 外观 原理图 说明 1. 当客服端需要使用一个复杂的子系统(子系统之间关系错综复杂),但又不想和他们扯上关系时,我们需要单独的写出一个类来与子系统交互,隔离客户端与子系统之间的联系 ...