<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [NewLife.XCode]臟數據

      NewLife.XCode是一個有10多年歷史的開源數據中間件,支持nfx/netstandard,由新生命團隊(2002~2019)開發完成并維護至今,以下簡稱XCode。

      整個系列教程會大量結合示例代碼和運行日志來進行深入分析,蘊含多年開發經驗于其中,代表作有百億級大數據實時計算項目。

      開源地址:https://github.com/NewLifeX/X (求star, 729+)

       

      什么是臟數據

      在XCode中,每次執行實體類更新entity.Update時,都希望只更新修改過的字段,而不是update所有字段

      一方面,減少數據庫壓力以及通信流量;

      另一方面,多線程同時更新同一行數據的不同字段,在未加鎖的情況下,避免臟寫。

       

      IsDirty和Dirtys,這是XCode的臟數據,常常出現在Valid中 。

      如上圖,前者判斷Password字段是否有臟數據(Password被賦予跟原來不想等的值),后者清空Password臟數據。

      臟數據是生成Update語句的核心,不臟的字段不會出現在update set 之中,從而實現部分字段更新。

       

      設置臟數據

      臟數據是XCode實體類內置功能,每一個實體類屬性set操作中都帶有臟數據邏輯。

      實體類屬性并非普通屬性,而是帶有OnPropertyChanging邏輯 

      這里是臟數據的默認設置點,先比較新舊值是否一致,如果一致,顯然不會設置臟數據。

      實體屬性數值是否相等比較邏輯:

      • 整數全部轉換為Int64比較,避免因類型不同而誤判
      • 時間日期只比較年月日時分秒,而不比較毫秒等其它部分
      • 字符串比較時,null與empty相等
      • 浮點數比較(單精度和雙精度),比較到小數點后6位
      • Decimal比較到小數點后12位

      使用代碼來表達,大概是下面的樣子:

      實體類屬性賦值有三種方法:

      • user.Password = "Stone"
      • user.SetItem("Password", "Stone")
      • user["Password"] = "Stone"

       主要功能相似,都是給Password字段賦值。

      最大的不同點在于:后者一定不會設置臟數據,僅僅是簡單賦值;前面兩個可能會設置臟數據,要求Password原值不等于"Stone"時才會設置臟數據。

      * SetItem就是第一種強類型臟數據和第三種弱類型賦值兩者優點的混合體!

       

      臟數據效果

      Update User Set Mobile='13012345678', Code='abcdef' Where ID=74

      如上,修改了3個字段,但是Name本來就是“張三”,因此實際上只修改了兩個字段,也就是說只有兩個字段有臟數據(數值改變被弄臟了)。

      最終生成的update set語句,只包含帶有臟數據的字段。最后的where部分,則由主鍵組成。

       

      使用臟數據

      臟數據最常見于數據驗證Valid中,可以用來判斷某個屬性否則曾經被修改過

      如上,兩次用到臟數據,如果業務代碼沒有設置用戶名或創建時間,則在Valid時設置。

      因此,臟數據往往用于給字段設置默認值。除了可用于實體類Valid,還可以用于實體過濾器EntityModule.Valid。

       

      判斷臟數據有兩種辦法 Dirtys["CreateTime"] 和 IsDirty("CreateTime") 。上面的__.CreateTime實質上就是"CreateTime"常量,僅僅是為了避免用戶寫錯單詞。

      在大數據分析處理場合,數百萬實體對象位于內存之中,Dirtys將導致每個實體對象附帶實例化一個臟數據集合對象,而IsDirty則不會,因此效果更好。

       

      實現原理

      第一代臟數據實現就是字典 Dictionary<String, Boolean>,后來發現在高并發性頻繁出現多線程沖突;

      第二代臟數據實現是并行字典ConcurrentDictionary<String, Boolean>,后來在大數據分析處理中發現,單個并行字典,哪怕是空的,也要占用約2k內存空間;

      第三代臟數據實現 DirtyCollection,采用了內置數組以及CAS原子操作,擁有最好的性能以及最小內存占用。

       

      系列教程

      NewLife.XCode教程系列[2019版]

      1. 增刪改查入門。快速展現用法,代碼配置連接字符串
      2. 數據模型文件。建立表格字段和索引,名字以及數據類型規范,推薦字段(時間,用戶,IP)
      3. 實體類詳解。數據類業務類,泛型基類,接口
      4. 功能設置。連接字符串,調試開關,SQL日志,慢日志,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
      5. 反向工程。自動建立數據庫數據表
      6. 數據初始化。InitData寫入初始化數據
      7. 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
      8. 臟數據。如何產生,怎么利用
      9. 增量累加。高并發統計
      10. 事務處理。單表和多表,不同連接,多種寫法
      11. 擴展屬性。多表關聯,Map映射
      12. 高級查詢。復雜條件,分頁,自定義擴展FieldItem,查總記錄數,查匯總統計
      13. 數據層緩存。Sql緩存,更新機制
      14. 實體緩存。全表整理緩存,更新機制
      15. 對象緩存。字典緩存,適用用戶等數據較多場景。
      16. 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
      17. 實體工廠。元數據,通用處理程序
      18. 角色權限。Membership
      19. 導入導出。Xml,Json,二進制,網絡或文件
      20. 分表分庫。常見拆分邏輯
      21. 高級統計。聚合統計,分組統計
      22. 批量寫入。批量插入,批量Upsert,異步保存
      23. 實體隊列。寫入級緩存,提升性能。
      24. 備份同步。備份數據,恢復數據,同步數據
      25. 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
      26. 大數據分析。ETL抽取,調度計算處理,結果持久化

       

      posted @ 2019-03-26 20:24  大石頭  閱讀(2103)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 免费国产一区二区不卡| 无码伊人66久久大杳蕉网站谷歌| 亚洲日韩久热中文字幕| 18禁黄无遮挡网站免费| 国产亚洲精品成人aa片新蒲金| 国产成人精品a视频| 诱人的老师hd中文字幕| 云阳县| 日韩三级一区二区在线看| 国产美女直播亚洲一区色| 亚洲国产亚洲综合在线尤物| 亚洲欧美高清在线精品一区二区| 永久无码天堂网小说区| 亚洲AV无码专区亚洲AV桃| 福利一区二区1000| 日韩一区在线中文字幕| 欧洲亚洲色一区二区色99| 扒开双腿猛进入喷水高潮叫声| 亚洲精品美女一区二区| 国产在线观看网址不卡一区| 中文字幕av中文字无码亚| 国产精品香蕉在线观看不卡| 377P欧洲日本亚洲大胆| AV最新高清无码专区| 国产成人高清精品亚洲| 亚洲五月天综合| 国产成本人片无码免费| 国产一区日韩二区欧美三区| 国产一区二区三区乱码在线观看| 久久精品国产亚洲av高| 国产精品系列在线免费看| 久久国产精品老女人| 亚洲精品久荜中文字幕| 亚州av第二区国产精品| 特级做a爰片毛片免费看无码| 人人妻人人狠人人爽| 精品人妻少妇嫩草av专区| 91人妻无码成人精品一区91| 亚洲国产日韩欧美一区二区三区| 91一区二区三区蜜桃臀| 香港日本三级亚洲三级|