標籤:準備 放棄 資料類型 mpi data raw 機器 war 時間
mORMot沒有控制項安裝,直接添加到lib路徑,
工程中直接添加syncommons,syndb等到uses裡
---------------------------------------------------------
在進行網路編程中需要JSON對象的構建與解析,
這個Delphi XE+內建:
{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}
不過,不好用,大家更喜歡SuperObject。我本人以前一直用JsonDataObjects。
今天要給大家介紹的這套JSON程式碼程式庫算是“世外高人”,身懷絕世武功,而默默無聞,這就是 mORMot 系列開發架構。這是一個功能超級強大,學習曲線壁陡的開源架構。
http://synopse.info/
Project Name: Synopse mORMot Framework
Document Name: Software Architecture Design
Document Revision: 1.18
Date: May 27, 2016
Project Manager: Arnaud Bouchez
這是PDF文檔:
http://synopse.info/files/pdf/Synopse%20mORMot%20Framework%20SAD%201.18.pdf
資訊量達到驚人的2127頁。大部分人被這份文檔嚇到,以至於錯過了修鍊這套“絕世武功”的機會。
今天咱們從中把JSON編程單揀出來,看看mORMot有什麼神奇的地方。
使用mORMot沒有想象的那樣難,使用JSon只需要引用一個檔案synCommons。下面我們來看代碼,將SuperObject與mORMot做一個對比:
const cstMaxTest = 100000;
procedure TForm1.TestSO;
var jo: ISuperObject; i: Int64; sw: TStopWatch;
begin
sw := TStopWatch.Create;
jo := SO();
i := 0;
while i < cstMaxTest do begin
jo.S[‘Name‘] := ‘This is a Str‘ + IntToStr(i);
jo.I[‘Age‘] := i;
jo.O[‘List‘] := SO(‘[1,"Hello",5,{"name":"c5soft","age":50}]‘);
if i = 100 then
Log(‘SO:‘ + jo.AsJSon());
inc(i);
end;
Log(‘SuperObject: ‘ + sw.Stop());
sw.free;
end;
procedure TForm1.TestMJ;
var jo: Variant; i: Int64; sw: TStopWatch;
begin
TDocVariant.New(jo); ;
sw := TStopWatch.Create;
i := 0;
while i < cstMaxTest do begin
jo.Name := ‘This is a Str‘ + IntToStr(i);
jo.Age := i;
jo.List:=_JSon(‘[1,"Hello",5,{"name":"c5soft","age":50}]‘);
if i = 100 then
Log(‘MJ:‘ + VariantSaveJSON(jo));
inc(i);
end;
Log(‘mORMot JS: ‘ + sw.Stop());
sw.free;
end;
做一個10萬次的測試,這是輸出結果:
SO:{"Age":100,"Name":"This is a Str100","List":[1,"Hello",5,{"age":50,"name":"c5soft"}]}
SuperObject: 00:01.561
MJ:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
mORMot JS: 00:00.326
發現了吧,mORMot比SuperObject快太多,幹同樣的活,SuperObject用的時間是mORMot的5倍。
使用mORMot還用另外兩個好處:
其一、用jo.Name代替jo.S[‘Name‘]更直觀
其二、在調試階段設定斷點,觀察jo的值,delphi告訴你:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}
而你去跟蹤SuperObject的jo,Delphi只能告訴你那是一個對象,具體值是多少,她說“太複雜,一言能盡”,結果什麼也看不到。
下期預告:windows下構建http服務,放棄indy(intraweb),改用iocp(diocp)嗎?錯了!用http.sys才是王道,這一切mORMot已經悄悄地為我們準備好了。
http://bbs.2ccc.com/topic.asp?topicid=511839
---------------------------------------------------------
我測試了,我一個表內一次提取12萬多條資料,伺服器端產生json串時間不到3秒,程式和資料庫都在我機器上,不知道測試的準確不
---------------------------------------------------------
mORMot內部整合的資料庫是SQLite,mORMot可以串連任何當前流行的資料庫,mORMot還可以不串連任何資料庫,用記憶體表來工作。
說到SQLite,這也是很牛X的,很獨特的。這是一種動態資料類型的資料庫,create table時可以不指定欄位類型,指定了資料類型比如整數型,也可以儲存字串類型的資料。這是目前開源、跨平台、代碼量最小的資料庫。如果資料量不大,希望整合在可執行檔中 (embbed),sqlite是一個很好的選擇。
如果要輸出很大的資料到終端介面,一定要使用分頁。即使Delphi產生json資料
不慢,網路傳送速度快不了,前端(比如瀏覽器)裝配資料快不了。SQLite的select 支援分頁:
SELECT ... FROM ... WHERE ... ORDER BY .. LIMIT... OFFSET...
沒有mORMot,可以用DISQLite,僅能做單機版的軟體,有了mORMot,使用SQLite資料庫可以做C/S架構的軟體,而且很方便的就有了3Tier, 4Tier。
轉:Delphi語言最好的JSON程式碼程式庫 mORMot學習筆記1