一、分布式數據庫基礎
1. 核心概念速記表
術語 | 解釋 | 示例場景 |
---|---|---|
分布式數據庫 | 數據自動同步到同賬號設備 | 手機添加商品→平板立即顯示 |
KV數據模型 | 鍵值對存儲(類似JSON) | {"cart_item1": {"name":"牛奶","price":10}} |
數據同步策略 | 自動(實時)/手動(按需) | 手表僅同步關鍵健康數據 |
沖突解決 | 最后寫入優先/自定義合并規則 | 手機平板同時修改商品數量 |
?2. 基礎操作代碼塊
// 1. 創建分布式數據庫
const DB_NAME = 'shopping_cart_db'
const store = relationalStore.getRdbStore(this.context, {name: DB_NAME,distributed: true // 關鍵配置!
})// 2. 創建表(購物車示例)
await store.executeSql(`CREATE TABLE IF NOT EXISTS cart (item_id TEXT PRIMARY KEY,name TEXT,price REAL,count INTEGER)`
)// 3. 插入數據(多設備自動同步)
await store.insert('cart', {item_id: '1001',name: '鴻蒙開發板',price: 599,count: 1
})
二、進階實戰:購物車多端同步
1. 數據同步沖突處理
// 設置沖突解決策略(在數據庫初始化時)
store.setConflictResolver((localData, remoteData) => {// 規則1:價格沖突時取最低價if (localData.price !== remoteData.price) {return localData.price < remoteData.price ? localData : remoteData}// 規則2:數量沖突時求和return { ...localData, count: localData.count + remoteData.count }}
)
?2. 設備差異化同步
// 根據設備類型選擇同步字段(手表不同步圖片)
const syncColumns = deviceInfo.deviceType === 'watch' ? ['item_id', 'name', 'price'] : ['*']store.sync({tables: ['cart'],columns: syncColumns,mode: relationalStore.SyncMode.PUSH_PULL
})
三、性能優化技巧
1. 優化方案
- 數據分片:大表按時間分片同步
store.sync({tables: ['cart'],condition: 'timestamp > ?',conditionArgs: [Date.now() - 86400000] // 只同步24小時內數據
})
? ? 2.索引優化:為高頻查詢字段添加索引
await store.executeSql('CREATE INDEX idx_price ON cart(price)')
? ? 3.批量操作:減少跨設備通信次數
await store.batchInsert('cart', itemList)
四、調試與問題排查
1. 常用調試命令
# 查看分布式同步日志
hdc shell hilog | grep DistributedDB# 強制重置本地數據庫
hdc shell rm -rf /data/app/el2/100/database/包名/
2. 常見問題解決方案
問題現象 | 解決步驟 | 原理說明 |
---|---|---|
設備間數據不同步 | 1. 檢查華為賬號是否相同2. 驗證網絡狀態3. 查看數據庫權限 | 分布式安全策略限制 |
同步速度慢 | 1. 減少單次同步數據量2. 關閉非必要表的同步 | 藍牙/WiFi帶寬限制 |
頻繁發生沖突 | 1. 優化沖突解決策略2. 添加時間戳字段輔助判斷 | 多設備并發寫入導致 |
?
?
?