[英]Where do decentralized applications (blockchain) store their data?
隨着加密熱潮的興起,我一直在閱讀並知道所有加密數據庫都基於稱為區塊鏈的東西。 我知道區塊鏈是什么以及它是如何工作的,但是所有這些分散的數據存儲在哪里以及如何存儲?
不同的區塊鏈實現可能在每個節點需要多少數據才能在網絡上處於活動狀態方面有所不同,但在最常見/最簡單的情況下,區塊鏈網絡的每個節點都存儲區塊鏈的完整副本 - 以及其中的所有數據 - 本地。
去中心化這個詞本身解釋了數據沒有存儲在某個特定的地方,而是將數據存儲在各個地方,對於區塊鏈來說,這些地方就是網絡中的所有節點,如果您連接到網絡,這些節點就是您的計算機。 每個人都在本地擁有數據副本。
您可以將區塊鏈視為一種數據結構,它可以與僅具有僅附加架構的數據庫相關聯。 由於它是一個類似分類帳的系統,區塊鏈可以記錄事物,但您不能對這些記錄使用 UPDATE 或 Delete 等方法。 您所能做的就是添加新記錄並使之前的記錄過時。
舉個簡單的例子,
讓我們來看看區塊鏈是用像這樣的塊設計的
數據 01 + 數據 02 + 數據 03 + .... + 數據 n
數據 01 - 變量 x =20 有一些值
如果你想改變這個變量,你添加一個新的記錄說
數據 101 - 現在變量 x=10 或
數據 101 - (x-10) 剛剛發生。
Dara Storage:所有進入區塊鏈的數據(在網絡節點達成共識后)將被添加到區塊鏈,然后在所有節點之間分配。
當您考慮將區塊鏈用作數據庫時,您必須找到它是否適合您的解決方案,並確定與區塊鏈背后的技術配合使用的最佳架構。
這是我寫的兩篇文章,它們將介紹它的實際工作原理。 希望這會有所幫助,
這是一個很酷的問題。 我認為您的意思是在區塊鏈中存儲數據的位置。 區塊鏈使用鍵值來存儲數據。 關鍵是哈希碼。 就像交易添加到新塊時一樣。 它將是 sha256(sha256(translation raw)) 兩次,這是一個鍵(不要忘記一個塊包含數千個交易),新塊將存儲到 LevelDB( http://leveldb.org )中。 LeveDB 是一個輕量級、單一用途的庫,可以綁定到許多平台。 它是一個嵌入式數據庫,因此區塊鏈使用 levelDB 保存數據。
你的比特幣來源: https : //github.com/bitcoin/bitcoin
https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.8.0.md
LevelDB, a fast, open-source, non-relational database from Google, is
now used to store transactions and block indices. LevelDB works much better
on machines with slow I/O and is faster in general. Berkeley DB is now only
used for the wallet.dat file (public and private wallet keys and transactions
relevant to you).
我創建了一個項目來解釋它。
https://github.com/tomgtqq/Private-Blockchain-Leveldb
/* ===== Persist data with LevelDB ==================
| Learn more: level: https://github.com/Level/level |
/===================================================*/
const level = require('level');
const chainDB = './chaindata';
class LevelSandbox {
constructor() {
this.db = level(chainDB);
}
// Get data from levelDB with key (Promise)
getLevelDBData(key){
let self = this;
return new Promise(function(resolve, reject) {
self.db.get(key, (err, value) => {
if(err){
if (err.type == 'NotFoundError') {
resolve(undefined); //@cool if NotFoundError
}else {
reject(err);
}
}else {
resolve(value);
}
});
});
}
// Get All Blocks in DB
getAllBlocks(){
let self = this;
let dataArray = [];
return new Promise(function(resolve, reject){
self.db.createReadStream().on('data', function(chunk){
dataArray.push(chunk);
}).on('error', function(err){
reject(error);
}).on('close', function(){
resolve(JSON.stringify(dataArray).toString());
});
});
}
// Add data to levelDB with key and value (Promise)
addLevelDBData(key, value) {
let self = this;
return new Promise(function(resolve, reject) {
self.db.put(key, value, function(err) {
if (err) {
reject(err);
}
resolve(value);
});
});
}
// Method that return the height
getBlocksCount() {
let self = this;
return new Promise(function(resolve, reject){
let count = 0;
self.db.createReadStream().on('data', function(chunk){
count++;
}).on('error', function(err){
reject(error);
}).on('close', function(){
resolve(count - 1);
});
});
}
}
module.exports.LevelSandbox = LevelSandbox;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.