瀏覽器端數據庫存儲計劃的整頓 -- indexDB 和 localStorage

檢察原文

有些安全性不太主要的數據,我不想花大氣力搞一台服務器,再裝置mysql或許 monogdb,再寫點rest接口。這也太麻煩了,瀏覽器里原本就有很好用的數據庫。你為何不嘗試一下呢?

1. 客戶端存儲現在有兩個計劃比較

計劃長處瑕玷
localStorage簡樸易用,同步操縱存儲容量小,平常不凌駕10MB
indexDB接口都是異步的,操縱不輕易容量比localStorage大

假如要運用localStorage,那末存儲量比較小。假如是用indexDB,那末最好找點開源庫,直接封裝友愛的API, 來輕易我們運用indexDB。

下面引見一些很好用的的庫。

2. 簡介

2.1. localForage

localforage.setItem('key', 'value', function (err) {
  // if err is non-null, we got an error
  localforage.getItem('key', function (err, value) {
    // if err is non-null, we got an error. otherwise, value is the value
  });
});

2.2. Dexie.js

    const db = new Dexie('MyDatabase');

    // Declare tables, IDs and indexes
    db.version(1).stores({
        friends: '++id, name, age'
    });

      // Find some old friends
    await db.friends
        .where('age')
        .above(75)
        .toArray();

    // or make a new one
    await db.friends.add({
        name: 'Camilla',
        age: 25,
        street: 'East 13:th Street',
        picture: await getBlob('camilla.png')
    });

2.3. zangodb

let db = new zango.Db('mydb', { people: ['age'] });
let people = db.collection('people');

let docs = [
    { name: 'Frank', age: 20 },
    { name: 'Thomas', age: 33 },
    { name: 'Todd', age: 33 },
    { name: 'John', age: 28 },
    { name: 'Peter', age: 33 },
    { name: 'George', age: 28 }
];

people.insert(docs).then(() => {
    return people.find({
        name: { $ne: 'John' },
        age: { $gt: 20 }
    }).group({
        _id: { age: '$age' },
        count: { $sum: 1 }
    }).project({
        _id: 0,
        age: '$_id.age'
    }).sort({
        age: -1
    }).forEach(doc => console.log('doc:', doc));
}).catch(error => console.error(error));

2.4. JsStore

var value = {
    column1: value1,
    column2: value2,
    column3: value3,
    ...
    columnN: valueN
};

connection.insert({
    into: "TABLE_NAME",
    values: [Value], //you can insert multiple values at a time

}).then(function(rowsAffected) {
    if (rowsAffected > 0) {
        alert('Successfully Added');
    }
}).catch(function(error) {
    alert(error.message);
});

2.5. minimongo

// Require minimongo
var minimongo = require("minimongo");

var LocalDb = minimongo.MemoryDb;

// Create local db (in memory database with no backing)
db = new LocalDb();

// Add a collection to the database
db.addCollection("animals");

doc = { species: "dog", name: "Bingo" };

// Always use upsert for both inserts and modifies
db.animals.upsert(doc, function() {
    // Success:

    // Query dog (with no query options beyond a selector)
    db.animals.findOne({ species:"dog" }, {}, function(res) {
        console.log("Dog's name is: " + res.name);
    });
});

2.6. pouchdb

var db = new PouchDB('dbname');

db.put({
  _id: 'dave@gmail.com',
  name: 'David',
  age: 69
});

db.changes().on('change', function() {
  console.log('Ch-Ch-Changes');
});

db.replicate.to('http://example.com/mydb');

2.7. lowdb

import low from 'lowdb'
import LocalStorage from 'lowdb/adapters/LocalStorage'

const adapter = new LocalStorage('db')
const db = low(adapter)

db.defaults({ posts: [] })
  .write()

// Data is automatically saved to localStorage
db.get('posts')
  .push({ title: 'lowdb' })
  .write()

3. 參考

    原文作者:Carl
    原文地址: https://segmentfault.com/a/1190000015143725
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞