giacomoran / react-native-leveldown

Native bindings to LevelDB for React Native, exposed as leveldown-compatible interface

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

react-native-leveldown

This library implements an abstract-leveldown compatible interface to LevelDB for React Native. The implementation is a thin Native Module binding directly to the original C++ implementation of LevelDB.

The native bindings are currently implemented only for iOS (and macOS via Catalyst). A patch implementing Android bindings would be welcome! In the meantime, you can get a compatible interface via level-js on top of indexeddbshim on top of expo-sqlite, but that's obviously much much slower.

You may also be interested in asyncstorage-down, another abstract-leveldown implementation for React Native. It includes no native code (which may be preferable in your configuration) by using AsyncStorage as its native storage layer. This approach will be much slower than native LevelDB bindings, particularly on iOS, where AsyncStorage is basically a serialized JSON blob.

Usage

Install via yarn add react-native-leveldown. Make sure to cd ios; pod install to build the native module.

This module implements the interface defined in abstract-leveldown, so you can either use it directly as documented there or somewhat more conveniently using the levelup wrapper.

Typical usage:

import RNLeveldown from "react-native-leveldown";
import LevelUp from "levelup";

const db = LevelUp(new RNLeveldown("myDatabaseName"));
await db.put("hello", "world");
await db.get("hello") // # => "world"
await db.close();

Note that databases are stored in the app container's Documents directory. In the future, the constructor API should probably be extended to add an option to store it instead in some semi-durable cache location, or an ephemeral temporary directory.

Testing

This library passes the abstract-leveldown test suite. To run the tests, launch the React Native app in the testapp subdirectory.

About

Native bindings to LevelDB for React Native, exposed as leveldown-compatible interface

License:MIT License


Languages

Language:Java 39.6%Language:Objective-C++ 26.8%Language:TypeScript 10.3%Language:Ruby 10.1%Language:Objective-C 7.4%Language:JavaScript 4.8%Language:Starlark 1.0%