非關系型數據庫:tiny

jopen 10年前發布 | 11K 次閱讀 NoSQL數據庫 Tiny

node.js下的一個非常簡單的非關系型數據庫,適合數據量不大,數據結構簡單的數據存儲。理論上,任何可以用json來保存的數據都可以用tiny來保存。

node.js可以使用的數據庫很多,但對于很多簡單的數據存儲,mongodb、MySQL就有些大材小用了,更主要的是麻煩。于是便有了node-tiny,一個非關系型的數據庫,有點類似于mongodb。

tiny的文檔中講述了這樣一個事實,當我們在數據庫中搜索數據的時候我們會根據id、名字、類別、標簽、日期等這些內容簡短的屬性來搜索,極少的時候根據全文信息等這樣的超長的字段來搜索。所以在創建一個tiny數據庫的時候tiny會將小于128字節的屬性加載到內存中,這樣檢索速度會非常快,當檢索結束時tiny根據檢索的結果加載對于記錄超過128字節的字段。

安裝 npm install tiny

使用例子:

var Tiny = require('tiny');
/**
創建數據庫實例。
說明:第一參數為存儲數據使用的文件名,該文件會在第一次使用時創建。第二參數為數據庫創建成功后執行的回調函數。
**/
Tiny('articles.tiny', function(err, db) {
/**
set:保存文檔對象。第一參數為存儲數據的key,第二參數為要存儲的內容,第三參數為回調函數。
**/
 /*
 for(var i = 0; i < 10; i++){
  db.set('doc' + i, {
     title: 'a document ' + i,
     content: 'hello world ' + i
  }, function(err) {
   if(err){
    console.log(err);
   }else{
    console.log('set!');
   }
  });
 }
 */
/**
    get:獲取一條記錄,第一參數同set,第二參數為回調函數。
    remove:刪除記錄,參數同set。
    update:更新記錄,第一參數同set(存儲的key),第二參數為回調函數。
**/
 /*
 db.get("doc0", function(err, data){
  console.log(arguments)
 });
 */

 /**
    each:迭代數據庫中的每一個對象。第一參數為迭代的函數(第一參數為記錄對象,第二參數為記錄的key);第二參數為迭代結束后的回調函數;第三參數為一個布爾值,若為true則會將大于128字節的也加載到內存迭代,默認false,建議保持默認。
 **/
 /*
 db.each(function(obj, key){
  console.log(arguments);

 }, function(){


 }, false);
 */

 /**
    fetch:檢索數據,第一參數為約束對象,第二三參數為函數,前者用于篩選數據,后者為檢索結束后的回調函數。
 **/
 /*
 db.fetch({
  limit: 3
 }, function(obj, key){
  return true;
 }, function(err, datas){
  console.log(arguments)
 });*/

 /**
    compact:將多余的數據在文件中刪除。
    對于tiny來說增刪改都是向文件中寫數據,注意是直接追加到文件末尾,所以update方法和remove方法只是在文件的末尾追加內容。之所以可以這樣設計是因為JavaScript對象屬性是唯一的,賦值操作會覆蓋掉之前的值,所以tiny只需按照文件的順序解析文件即可得到正確的數據。這樣設計的弊端是刪除掉的數據還會占用存儲空間,compact方法就是將多余的數據在文件中刪除
 **/
 /*
 db.compact(function(err) {
    console.log('done');
 });
 */
 /**
  數據修改和回調函數。
 **/
 /*
 db.update("doc0"
 ,{
    'title':{
        b:true,
        "c":0,
        e:"sssd",
        f:{
            g:'hello world',
            h:12200,
            f:"中文中文"
        }
    },
    b:[0,1,2,3,4,5]
 }
 ,function(err){
    if(!err){
        db.get("doc0", function(err, data){
            console.log(data['title']["f"]["f"])
        });
    }
 })
 */
});

項目主頁:http://www.baiduhome.net/lib/view/home/1412840769827

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!