新聞中心
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫(kù)成為了我們?nèi)粘?shù)據(jù)管理中不可或缺的一部分。而在數(shù)據(jù)庫(kù)中,如何高效地保存數(shù)據(jù)一直是程序員們關(guān)注的焦點(diǎn)。而作為一種高效的數(shù)據(jù)交換格式,PB(Protocol Buffer)可以幫助我們?cè)跀?shù)據(jù)庫(kù)中高效地保存數(shù)據(jù),本文將介紹。

創(chuàng)新互聯(lián)一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、成都網(wǎng)頁(yè)設(shè)計(jì)、微信小程序開(kāi)發(fā)、成都網(wǎng)站開(kāi)發(fā)、成都網(wǎng)站制作、成都軟件開(kāi)發(fā)、重慶App定制開(kāi)發(fā)是成都本地專(zhuān)業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來(lái)見(jiàn)證!
1.理解PB的基本概念
PB是一種基于二進(jìn)制的數(shù)據(jù)交換格式,它是Google公司開(kāi)發(fā)的一種結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,具有高效、緊湊、可擴(kuò)展等特點(diǎn)。在使用PB之前,先要了解它的基本概念。
1.1消息定義
在PB中,數(shù)據(jù)通過(guò)消息的形式進(jìn)行傳輸,每個(gè)消息可以包含一個(gè)或多個(gè)字段,每個(gè)字段都由一個(gè)名稱(chēng)和一個(gè)值組成,并且每個(gè)字段都是可選、重復(fù)或必需的。消息定義和字段定義的具體語(yǔ)法如下:
syntax = “proto3”;
message MessageName {
FieldType fieldName = tagNumber;
}
其中,F(xiàn)ieldType代表字段類(lèi)型,如int32、string、bool、enum等;fieldName代表字段名稱(chēng),可自??;tagNumber代表字段標(biāo)識(shí)號(hào),它是每個(gè)字段的唯一標(biāo)識(shí)。
1.2 序列化和反序列化
在PB中,將數(shù)據(jù)從消息格式轉(zhuǎn)換為二進(jìn)制格式的過(guò)程稱(chēng)為序列化,而將二進(jìn)制格式的數(shù)據(jù)轉(zhuǎn)換為消息格式的過(guò)程稱(chēng)為反序列化。PB提供了以下兩個(gè)API來(lái)實(shí)現(xiàn)序列化和反序列化:
byte[] toByteArray(); //將消息轉(zhuǎn)換為字節(jié)數(shù)組
static MessageName parseFrom(byte[] bytes); //將字節(jié)數(shù)組轉(zhuǎn)換為消息格式
2.使用PB在數(shù)據(jù)庫(kù)中高效保存數(shù)據(jù)
當(dāng)我們理解了PB的基本概念之后,就可以開(kāi)始在數(shù)據(jù)庫(kù)中使用PB高效地保存數(shù)據(jù)了。下面將介紹使用PB在MySQL和MongoDB數(shù)據(jù)庫(kù)中保存數(shù)據(jù)的具體步驟。
2.1 在MySQL中使用PB保存數(shù)據(jù)
在MySQL中使用PB保存數(shù)據(jù),需要進(jìn)行以下步驟。
2.1.1 創(chuàng)建數(shù)據(jù)庫(kù)和表
需要在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)test數(shù)據(jù)庫(kù),并在該數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為person表,該表定義如下:
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中,id為主鍵,自增長(zhǎng);data是二進(jìn)制格式的PB消息內(nèi)容,所以定義為blob類(lèi)型。
2.1.2 定義PB消息
在保存數(shù)據(jù)之前,需要定義一個(gè)PB消息格式,如下所示:
syntax = “proto3”;
message Person {
int32 id = 1;
string name = 2;
int32 age = 3;
}
其中,id、name、age分別代表person的id、name和age。
2.1.3 序列化和反序列化
在將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)之前,需要將PB消息序列化為字節(jié)數(shù)組,具體代碼如下:
Person person = Person.newBuilder()
.setId(1)
.setName(“張三”)
.setAge(18)
.build();
byte[] data = person.toByteArray();
在從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)時(shí),需要將讀取到的字節(jié)數(shù)組反序列化為PB消息,具體代碼如下:
ResultSet rs = stmt.executeQuery(“select data from person where id=1”);
if(rs.next()) {
byte[] data = rs.getBytes(“data”);
Person person = Person.parseFrom(data);
//輸出person信息
}
2.2 在MongoDB中使用PB保存數(shù)據(jù)
在MongoDB中使用PB保存數(shù)據(jù),需要進(jìn)行以下步驟。
2.2.1 連接MongoDB數(shù)據(jù)庫(kù)
需要連接MongoDB數(shù)據(jù)庫(kù)。在Java中,可以使用MongoDB的Java驅(qū)動(dòng)程序來(lái)連接數(shù)據(jù)庫(kù),具體代碼如下:
MongoClient client = new MongoClient(“l(fā)ocalhost”, 27017);
MongoDatabase db = client.getDatabase(“test”);
其中,test為數(shù)據(jù)庫(kù)名稱(chēng)。
2.2.2 定義PB消息
在選擇了數(shù)據(jù)庫(kù)之后,需要定義PB消息格式,如下所示:
syntax = “proto3”;
message Person {
int32 id = 1;
string name = 2;
int32 age = 3;
}
同樣地,id、name、age分別代表person的id、name和age。
2.2.3 序列化和反序列化
在將數(shù)據(jù)保存到MongoDB之前,需要將PB消息序列化為字節(jié)數(shù)組,具體代碼如下:
Person person = Person.newBuilder()
.setId(1)
.setName(“張三”)
.setAge(18)
.build();
byte[] data = person.toByteArray();
在從MongoDB中讀取數(shù)據(jù)時(shí),需要將讀取到的字節(jié)數(shù)組反序列化為PB消息,具體代碼如下:
MongoCollection collection = db.getCollection(“person”);
Document doc = collection.find(eq(“id”, 1)).first();
if (doc != null) {
byte[] data = ((Binary)doc.get(“data”)).getData();
Person person = Person.parseFrom(data);
//輸出person信息
}
3.
相關(guān)問(wèn)題拓展閱讀:
- 在PB中使用FoxPro數(shù)據(jù)庫(kù)的方法[2]
- PB9.0自帶的SQL數(shù)據(jù)庫(kù)文件(保存數(shù)據(jù)表的文件)是保存在哪里的?(比如SQL2023的是保存在C盤(pán)下的)
在PB中使用FoxPro數(shù)據(jù)庫(kù)的方法[2]
在PB 中建立新表
打開(kāi)新建的表
單擊數(shù)據(jù)庫(kù)畫(huà)板中的 數(shù)據(jù)操作(Data manipulation) 按鈕
選擇菜單 Rows ? Import
從 文件類(lèi)型 下拉框中選擇dbaseII & III(* dbf)
選擇被導(dǎo)入文件所在的目錄及文件名
單擊 打開(kāi) 按鈕
系統(tǒng)將打開(kāi)指定的文件 將該文件中的所有記錄導(dǎo)入新建的表中
但系統(tǒng)不提供直接將導(dǎo)入數(shù)據(jù)保存在本數(shù)據(jù)庫(kù)(表)中 如果要將導(dǎo)入的記錄保存為SQL Anywhere 環(huán)境下的數(shù)據(jù)庫(kù)(表)中 可以先將導(dǎo)入數(shù)據(jù)行以SQL格式保存在 sql 類(lèi)型文件中 在利用SQL語(yǔ)句將這些數(shù)據(jù)行插入新表中 步驟如下
按上面所列的步驟導(dǎo)入數(shù)據(jù)庫(kù)(DBF)文件中的數(shù)據(jù)
選擇菜單 File ? Save Row As …
在 存為類(lèi)型 列表框中選擇 SQL
選擇保存路徑 輸入保存文件名 單擊保存
關(guān)閉 Data manipulation 窗口 回到數(shù)據(jù)庫(kù)畫(huà)板
單擊 DB Administration (數(shù)據(jù)庫(kù)管理器)
選擇菜單 File ? Open
確信文件類(lèi)型為 SQL (* sql)
選擇第 步中所保存的文件 單擊 打開(kāi) 按鈕
刪除文件起始部分的之一條SQL語(yǔ)句 CREATE TABLE
單擊 Execute (執(zhí)行)按鈕 系統(tǒng)將把原數(shù)據(jù)庫(kù)中的所有行插入到新表中
需要注意的是 新伍簡(jiǎn)建的表在字段設(shè)置上必須與原DBF文件中的字段保持一致 即 新表中的字段數(shù)必須等于或大于原DBF文件中的字段數(shù)
新表中的字段順序要與原文件中的字段順序一樣 即使新表中字段數(shù)更多 但新的字段必須放在最后
新表與舊文件中字段名可以不一樣
新表中的數(shù)據(jù)類(lèi)型必須與舊表中的數(shù)據(jù)類(lèi)型兼容 字符 ? 字符 數(shù)值 ? 數(shù)字 數(shù)字 ? 字符……
數(shù)據(jù)格式相一致 如兩個(gè)文件中的日期格式必須一致
新表中字段長(zhǎng)度必須能容納舊數(shù)據(jù)庫(kù)文件中的對(duì)應(yīng)字段中的數(shù)據(jù) 如 舊數(shù)據(jù)庫(kù)某一字段寬度為C 但庫(kù)中所有記錄在該字段的實(shí)際最長(zhǎng)為 那么 新表中的字段寬度至少應(yīng)為C
如果你愿輪肢意 也可以將原FoxPro中的數(shù)據(jù)庫(kù)先轉(zhuǎn)換到TXT格式文件 再將TXT格式的文件導(dǎo)入SQL Anywhere數(shù)據(jù)庫(kù)(表)中 不過(guò)TXT文件中一條記錄獨(dú)占一行 各字段間必須用Tab鍵(符)隔開(kāi) 其導(dǎo)入方法與DBF文件中數(shù)據(jù)的導(dǎo)入方法類(lèi)似
以上兩種辦法均可實(shí)現(xiàn)在Power Builder下訪問(wèn)FoxPro數(shù)據(jù)庫(kù) 但兩種方法之間有些不同之處
從系統(tǒng)需求來(lái)看 之一種方式使用ODBC直接訪問(wèn)DBF文件 只要Power Builder基本系統(tǒng)即可 不需要安裝數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS) 而第二種方式必須安裝SQL Anywhere系統(tǒng)
從運(yùn)行效率來(lái)看 之一種方式速度要慢一些 后一種方式稍快 筆者在應(yīng)用程序中比較了兩種方式在速度上的差異 將FoxPro系統(tǒng)中的一個(gè)有 余條記錄的數(shù)據(jù)庫(kù) 用之一種方式聯(lián)接 在數(shù)據(jù)窗口控制中顯示(Retieve)記錄 需要 秒鐘左右 后來(lái)又用第二種方式 在SQL Anywhere 中新建一個(gè)表 將這 條記錄導(dǎo)入表中 聯(lián)接 顯示記錄 需要時(shí)間為 秒 對(duì)另一腔桐褲個(gè)擁有 萬(wàn)余條記錄的FoxPro數(shù)據(jù)庫(kù)直接使用ODBC 聯(lián)接 顯示的時(shí)間為 秒鐘
使用Power Builder 的主要優(yōu)勢(shì)體現(xiàn)在建立客戶/服務(wù)器模式的系統(tǒng)上 對(duì)于一般的單機(jī)系統(tǒng) 規(guī)模較小的系統(tǒng) 可能大多數(shù)人不會(huì)想到它 但如果你覺(jué)得FoxPro太老土 Visual FoxPro又太難學(xué)的的話 不妨試試Power Builder
編輯推薦
ASP NET開(kāi)發(fā)培訓(xùn)視頻教程
Microsoft NET框架程序設(shè)計(jì)視頻教程
lishixinzhi/Article/program/PB/202311/24620
PB9.0自帶的SQL數(shù)據(jù)庫(kù)文件(保存數(shù)據(jù)表的文件)是保存在哪里的?(比如SQL2023的是保存在C盤(pán)下的)
默認(rèn)是保存在建立的工作區(qū)的目錄,也可以自定義的
沒(méi)明白你的問(wèn)題,PB是開(kāi)發(fā)工具,本身并不帶數(shù)據(jù)庫(kù)。它可以連接各伏森種數(shù)據(jù)皮塌庫(kù),數(shù)據(jù)庫(kù)文件是各數(shù)據(jù)缺握畝庫(kù)系統(tǒng)自己管理的,與PB無(wú)關(guān)。
關(guān)于pb 數(shù)據(jù)庫(kù)保存數(shù)據(jù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專(zhuān)注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。
新聞名稱(chēng):如何使用PB在數(shù)據(jù)庫(kù)中高效保存數(shù)據(jù)(pb數(shù)據(jù)庫(kù)保存數(shù)據(jù))
鏈接分享:http://m.fisionsoft.com.cn/article/djciici.html


咨詢
建站咨詢
