Level/levelup-1-简介
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 get, put and delete operations, batched put and delete, bi-directional iterators and simple compression using the very fast Snappy algorithm.
LevelDB是一个Google构建的简单的键值存储。在Google Chrome和其他产品中被使用。LevelDB支持抽象字节数组作为键和值,单一get, put 和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 levelup
, leveldown
and encoding-down
. Its main export is levelup
- i.e. you can do var db = require('level')
.
level包是推荐的入门方法。它有着levelup
, leveldown
和
encoding-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-简介的更多相关文章
- Level/levelup-2-API
https://github.com/Level/levelup Special Notes What happened to db.createWriteStream() levelup(db[, ...
- 超实用压力测试工具-ab工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...
- Jtree (节点的渲染+资源管理器)
我们的还是自定义的Jtree的类: package jtree.customNode; import java.io.File; import javax.swing.JTree; import ja ...
- jtree(选择框)
jtree一般的用法是: 1. 展示电脑中文件的层次结构,如图所示. 具体的代码: package jtree; import java.io.File; import javax.swing.JTr ...
- RING0,RING1,RING2,RING3
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普 ...
- Vue2 实现树形菜单(多级菜单)功能模块
结构示意图 ├── index.html ├── main.js ├── router │ └── index.js # 路由配置文件 ├── components # 组件目录 │ ├── App. ...
- ab压测工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...
- express操作数据库
Express 首页 入门 使用指南 API 中文手册 进阶话题 有用的资源 集成数据库 为 Express 应用添加连接数据库的能力,只需要加载相应数据库的 Node.js 驱动即可.这里将会简要介 ...
- ab(http)与abs(https)压测工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...
随机推荐
- NSURLSession和NSURLConnection
iOS9.0之后NSURLConnection被注销,采用NSURLSession,先介绍NSURLSession,然后介绍NSURLConnection 1.NSURLSession: post请求 ...
- HttpServletRequest 各种方法总结(转)
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. 转自: ...
- Q:java中的泛型数组
对于java,其是不支持直接创建泛型数组的.当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况. package other.jdk1_5; /** * 该类用于演示泛型数组的创 ...
- lambda 表达式学习笔记
在Java中传递一个代码段并不容易,不能直接传递代码段.Java是一个面向对象语言,所以必须构造一个对象,这个对象的类需要一个方法能包含所需的代码.lambda的出现有效的解决这个问题,让代码变得更加 ...
- csharp:search and Compare string
/// <summary> /// 涂聚文 /// 2011 捷为工作室 /// 缔友计算机信息技术有限公司 /// </summary> /// <param name ...
- 移动端HTML5实现文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. 用的技术 ...
- Java类中的各种成员的加载顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...
- 给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】
/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ /** * 百度 ...
- (WF, Debug) System.Xaml.XamlObjectWriterException: Cannot create unknown type '{clr-namespace:xx;assembly=xx}xx'.
Load WF 后一开始运行的时候就发现 System.Xaml.XamlObjectWriterException: Cannot create unknown type '{clr-namespa ...
- c# 调用 c dll 例子
// case 1 传递 int* ///////////////////////////////////////////// extern “C” __declspec(dllexport) int ...