用鴻蒙打造真正的跨設備數據庫:從零實現分布式存儲

在這里插入圖片描述

網羅開發 (小紅書、快手、視頻號同名)

??大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方向。在移動端開發、鴻蒙開發、物聯網、嵌入式、云原生、開源等領域有深厚造詣。

圖書作者:《ESP32-C3 物聯網工程開發實戰》
圖書作者:《SwiftUI 入門,進階與實戰》
超級個體:COC上海社區主理人
特約講師:大學講師,谷歌亞馬遜分享嘉賓
科技博主:華為HDE/HDG

我的博客內容涵蓋廣泛,主要分享技術教程、Bug解決方案、開發工具使用、前沿科技資訊、產品評測與使用體驗。我特別關注云服務產品評測、AI 產品對比、開發板性能測試以及技術報告,同時也會提供產品優缺點分析、橫向對比,并分享技術沙龍與行業大會的參會體驗。我的目標是為讀者提供有深度、有實用價值的技術洞察與分析。

展菲:您的前沿技術領航員
👋 大家好,我是展菲!
📱 全網搜索“展菲”,即可縱覽我在各大平臺的知識足跡。
📣 公眾號“Swift社區”,每周定時推送干貨滿滿的技術長文,從新興框架的剖析到運維實戰的復盤,助您技術進階之路暢通無阻。
💬 微信端添加好友“fzhanfei”,與我直接交流,不管是項目瓶頸的求助,還是行業趨勢的探討,隨時暢所欲言。
📅 最新動態:2025 年 3 月 17 日
快來加入技術社區,一起挖掘技術的無限潛能,攜手邁向數字化新征程!


文章目錄

    • 摘要
    • 引言
  • 鴻蒙分布式數據庫開發全流程
    • 導入和初始化分布式數據庫
      • 添加依賴
      • 初始化數據庫
    • 數據的基本操作:增刪改查
      • 插入數據
      • 查詢數據
    • 應用場景舉例
      • 家庭賬本 App:多個設備實時同步賬目
      • 校園點名系統:老師和學生設備共享考勤信息
      • IoT家庭場景:設備間共享狀態數據
    • QA 環節:常見問題答疑
    • Q1:分布式數據庫需要聯網嗎?
    • Q2:如何確保數據同步成功?
    • Q3:不同設備是否需要權限聲明?
    • Q4:可否對分布式數據庫加密?
    • 總結

摘要

在設備之間數據聯動的時代,鴻蒙系統提供了強大的分布式能力,尤其是分布式數據庫(Distributed RDB),可以幫助我們在多個設備間共享和同步數據。你可以在一臺手機上存數據,另一臺平板直接讀取——就像它們共享了同一個數據庫一樣。

這篇文章就會帶你一步一步上手鴻蒙中的分布式數據庫,包括如何配置、初始化、增刪改查操作,以及如何實現設備間的數據同步。還會提供兩個實戰場景演示,最后通過問答環節解決你開發中可能遇到的問題。

引言

隨著鴻蒙系統的持續發展,它提出的“分布式軟總線”理念也在實際開發中發揮了越來越大的作用。尤其是在多設備協同辦公、家庭設備數據互通、IoT設備同步控制等方面,分布式數據庫成為了連接多端的紐帶。

例如,一款筆記軟件可以在手機記錄內容后自動同步到平板或電視上繼續閱讀;一個家庭記賬 App 能讓每個家庭成員的設備實時同步賬單信息。聽起來像云同步?但鴻蒙是原生設備直連的數據同步,速度快、成本低、體驗好。

鴻蒙分布式數據庫開發全流程

導入和初始化分布式數據庫

添加依賴

entry/build.gradle 文件中加入如下模塊依賴(僅供參考):

dependencies {implementation 'ohos:data-distributed'
}

初始化數據庫

通過 DatabaseHelper 創建分布式數據庫,并設置 Options 指定 setDistributed(true)

import ohos.data.DatabaseHelper;
import ohos.data.distributed.common.Options;
import ohos.data.rdb.ValuesBucket;
import ohos.data.rdb.RdbPredicates;
import ohos.data.distributed.user.RdbDistributedStore;DatabaseHelper helper = new DatabaseHelper(this);// 設置為分布式數據庫
Options options = new Options.Builder().setDistributed(true).build();// 獲取數據庫實例
RdbDistributedStore store = helper.getRdbDistributedStore("MyDistributedDB", options, null);// 創建表
store.executeSql("CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, name TEXT)");

數據的基本操作:增刪改查

插入數據

ValuesBucket values = new ValuesBucket();
values.putInteger("id", 1);
values.putString("name", "張三");store.insert("user", values);

查詢數據

RdbPredicates predicates = new RdbPredicates("user");
ResultSet resultSet = store.query(predicates, null);  // 查詢所有字段while (resultSet.goToNextRow()) {int id = resultSet.getInt(resultSet.getColumnIndexForName("id"));String name = resultSet.getString(resultSet.getColumnIndexForName("name"));HiLog.info(LABEL_LOG, "用戶ID: %{public}d, 姓名: %{public}s", id, name);
}
resultSet.close();

應用場景舉例

家庭賬本 App:多個設備實時同步賬目

場景:父親在手機上記了一筆支出,兒子在平板上幾秒鐘后就能看到這條記錄。

// 添加一條消費記錄
ValuesBucket expense = new ValuesBucket();
expense.putInteger("id", 1001);
expense.putString("name", "超市購物");store.insert("user", expense);

設備之間自動同步,無需手動操作或云服務支持。只要它們在同一鴻蒙分布式網絡下,數據就能共享。

校園點名系統:老師和學生設備共享考勤信息

場景:老師在課堂用手機記錄學生簽到信息,系統會自動同步到教務辦公室的鴻蒙平板。

store.executeSql("CREATE TABLE IF NOT EXISTS attendance (stu_id INTEGER, status TEXT)");ValuesBucket row = new ValuesBucket();
row.putInteger("stu_id", 202306);
row.putString("status", "出勤");store.insert("attendance", row);

IoT家庭場景:設備間共享狀態數據

場景:智能空調把當前溫度寫入分布式數據庫,智能窗簾讀取這個數據決定是否開啟。

store.executeSql("CREATE TABLE IF NOT EXISTS home_status (device TEXT, value TEXT)");ValuesBucket temp = new ValuesBucket();
temp.putString("device", "temperatureSensor");
temp.putString("value", "28");store.insert("home_status", temp);

QA 環節:常見問題答疑

Q1:分布式數據庫需要聯網嗎?

不需要依賴互聯網,但設備之間需要通過鴻蒙的分布式軟總線連接在同一局域網或近場通信環境中。

Q2:如何確保數據同步成功?

使用 KvManager 等模塊可監聽數據同步事件,確保同步完成后再進行業務操作。

Q3:不同設備是否需要權限聲明?

是的,需要聲明分布式相關權限,如:

<uses-permission ohos:name="ohos.permission.DISTRIBUTED_DATASYNC" />

Q4:可否對分布式數據庫加密?

目前 RDB 本身支持加密,但分布式場景需要額外的安全控制,可以配合 DataEncryptionUtils 等工具。

總結

鴻蒙的分布式數據庫功能,為開發者打開了多設備數據互通的新大門。相比傳統的云端存儲方案,它更快速、更私密、更適合本地設備聯動場景。

無論你是做多端協同辦公、智能家居,還是教育、醫療等應用場景,都可以考慮利用鴻蒙原生的分布式數據庫功能,把數據真正“跑”起來,跑到用戶每一個設備上。

下一步,你可以試著將已有的單機數據模型升級成分布式結構,再配合 分布式 UI多設備協同 等特性,打造完整的分布式體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87077.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Docker基礎】Docker數據卷:數據卷的作用與使用場景

目錄 1 Docker數據卷概述 1.1 什么是數據卷 1.2 數據卷的核心特性 3 數據卷與綁定掛載的對比 2.1 技術對比 2.2 選擇建議 3 數據卷的核心作用 3.1 數據持久化 3.2 數據共享 3.3 備份與遷移 4 數據卷使用場景詳解 4.1 數據庫應用 4.2 日志集中管理 5 數據卷操作全…

安裝GPU版本的Pytorch

前言 Pytorch是深度學習框架,在工作中我們一般是使用GPU版本的Pytorch,提高運行效率 安裝GPU版本的Pytorch需要先安裝CUDA和CUANN這兩個GPU環境 如果準備安裝GPU版本的Pytorch安裝同志沒有安裝CUDA和CUANN,請看我上一篇文章 RTX5070顯卡安裝CUDA和CUDNN-CSDN博客 目錄 安裝…

微信小程序學習筆記

微信小程序學習筆記 一、文件和目錄結構介紹 小程序包括&#xff1a;主體文件、頁面文件 主體文件&#xff1a; app.js&#xff1a;小程序入口文件app.json&#xff1a;小程序的全局配置文件app.wxss&#xff1a;小程序的全局樣式 頁面文件&#xff1a;是每個頁面所需的文…

抓包之通過wireshark抓ping包

寫在前面 本文看下如何抓ping包。 1&#xff1a;正文 因為ping使用的是icmp協議&#xff0c;所以這里我們可以通過過濾icmp協議來進行抓包&#xff1a; 其中對于icmp請求報文狀態碼是8&#xff0c;如下&#xff1a; 響應狀態碼是0&#xff1a; 如下圖是一個局域網環境中…

大文件分片上傳 — nodejs

上傳文件路由&#xff1a; var express require(express); var router express.Router(); const multer require(multer); const fs require(fs); const path require(path);// 確保上傳目錄存在 const uploadDir path.join(__dirname, ../backend/uploads); const temp…

HarmonyOS File和base64字符串轉換

1. HarmonyOS File和base64字符串轉換 1.1. Base64 1.1.1. Base64認知 Base64 是一種基于64個 ASCII 字符來表示二進制數據的表示方法&#xff0c;這個64個不同的字符為&#xff1a; ??&#xff08;1&#xff09;大、小寫字母&#xff08;A– Z、a–z&#xff09;。52個 ?…

【NodeJs】【npm】npm安裝electron報錯

解決問題 npm安裝electron報錯一般來說是鏡像源的問題。 electron的鏡像源與一般的 vue 之類的鏡像源地址不一樣需要單獨配置。 npm讀取的全局配置一般是在 C:\Users\{用戶}\.npmrc 這個配置文件中。 如果你找不到你的配置文件可以執行如下命令, # 執行后會直接用txt打開你的…

植物small RNA靶基因預測軟件,psRobot

psRoto軟件安裝 網址 http://omicslab.genetics.ac.cn/psRobot/downloads.php下載和安裝 wget http://omicslab.genetics.ac.cn/psRobot/program/WebServer/psRobot_v1.2.tar.gz # tar -zxvf psRobot_v1.2.tar.gz # cd psRobot_v1.2 ## ./configure make make installpsRot…

翻譯服務器

基于UDP編程博客里的回顯服務器代碼,翻譯服務只需要改process方法即可 所以我們可以創建一個UdpDictServer直接繼承UdpEchoServer然后重寫process方法 在重寫的方法中完成翻譯的過程 代碼: package network;import java.io.IOException; import java.net.SocketException; …

初等變換 線性代數

初等變換 介紹了三種初等變換的操作。 初等矩陣 初等矩陣是干嘛的呢&#xff1f;實際上初等矩陣就是我們矩陣的初等操作&#xff0c;每一個對矩陣的初等變換操作都相當于乘上一個初等矩陣。 左乘初等矩陣就相當于對行進行初等操作&#xff0c;右乘則相當于對列進行初等操作。…

Java基礎 集合框架 隊列架構 雙端隊列 Deque

雙端隊列 Deque Deque 方法簡介Deque 核心特點Deque實現類 ArrayDequeArrayDeque 構造方法ArrayDeque 的數據結構及實現原理ArrayDeque 方法介紹ArrayDeque 核心特性ArrayDeque 總結ArrayDeque 使用樣例代碼 Deque實現類 LinkedListDeque實現類 ConcurrentLinkedDeque (非阻塞線…

【Spring】——事務、整合、注解

目錄 一.Spring與mybatis的整合 1.配置文件 ?編輯2. 二.事務 1.事務屬性 2.傳播屬性 3.異常屬性 4.常見配置 三.注解 1.什么是注解 2.Autowired 1.用戶自定義注解 ?編輯?編輯2.JDK類型注入value 3.Bean 1.對象的創建 2.對象創建次數 3.Bean注解的注入 1.自…

Linux 離線下安裝gcc、g++

描述 離線時編譯Redis、nginx等編譯包&#xff0c;需要gcc安裝包&#xff0c;評論提醒我 上傳補充 操作 1、進入gcc目錄&#xff0c;并執行安裝命令 rpm -ivh *.rpm --nodeps --force查看版本 gcc -v2、進入gcc-c目錄&#xff0c;并執行安裝 rpm -ivh *.rpm --nodeps --f…

融智學定律3:流動創造價值僅當跨域協同

關鍵公式意義&#xff1a; 人流方程中的 α/β 反映城市吸引力不對稱性 物流優化中的 η 實現時間價值貨幣化 金流模型的 σ(?) 捕捉市場情緒突變點 信息熵的 ∥gi??gj?∥ 度量知識勢差驅動 當五流在黎曼流形上滿足 ?_μ?T^μν0&#xff08;能量動量守恒&#xff09…

趣味數據結構之——數組

你們一定都聽說過它的故事…… 是的沒錯&#xff0c;就是一個蘿卜一個坑。??? 想象一下數組就是那個坑&#xff0c;那么定義數組就是在挖坑。 元素就是蘿卜。 坑就在那里(地上)&#xff0c;整整齊齊地排在那里。 于是數組最重要的一個特性就顯現出來了——隨機存取。還…

PR-2025《Scaled Robust Linear Embedding with Adaptive Neighbors Preserving》

核心思想分析 這篇論文的核心思想在于解決線性嵌入&#xff08;linear embedding&#xff09;與非線性流形結構之間的不匹配問題。傳統方法通過保留樣本點間的親和關系來提取數據的本質結構&#xff0c;但這種方法在某些情況下無法有效捕捉到數據的全局或局部特性。此外&#…

Redis-漸進式遍歷

之前使用的keys查找key,一次獲取到了所有的key,當key較多時,這個操作就有可能造成Redis服務器阻塞.特別是keys *操作. 于是可以通過漸進式遍歷,每次獲取部分key,通過多次遍歷,既查詢到了所有的key,又不會卡死服務器. 漸進式遍歷不是通過一個命令獲取到所有元素的,而是由一組命…

ISP Pipeline(3):Lens Shading Correction 鏡頭陰影校正

上一篇文章講的是&#xff1a;ISP Pipeline&#xff08;2&#xff09;&#xff1a; Black Level Compensation:ISP Pipeline&#xff08;2&#xff09;&#xff1a;Black Level Compensation 黑電平補償-CSDN博客 視頻&#xff1a;(4) Lens Shading Correction | Image Signal…

什么是WebAssembly(WASM)

WebAssembly&#xff08;WASM&#xff09; 是一種高性能的低級編程語言字節碼格式&#xff0c;可在網頁和非網頁環境中運行&#xff0c;支持多語言編譯&#xff0c;運行速度接近原生代碼。它在區塊鏈中的作用是&#xff1a;作為智能合約的執行引擎&#xff0c;被多條非以太坊鏈…

【C++】inline的作用

一、inline的作用 1.1函數內聯 作用?&#xff1a;建議編譯器將函數調用替換為函數體代碼&#xff0c;減少函數調用的開銷&#xff08;壓棧/跳轉&#xff09;。?注意?&#xff1a;這只是對編譯器的建議&#xff0c;編譯器可能忽略&#xff08;如函數體過大或遞歸&#xff0…