非關系型數據庫: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"]) }); } }) */ });
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!