<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/netcore,由新生命團隊(2002~2019)開發完成并維護至今,以下簡稱XCode。

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

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

       

      XCode是充血模型,在實體類上附帶有大量便捷操作,其中就包括各種目標數據類型的導入導出!

       

      Json序列化 

       當下最常用的數據通信格式毋容置疑肯定是Json,實體對象可直接轉Json作為接口返回值。

      下面看看一個普通Role實體對象的Json序列化(ToJson)和Json反序列化(ToJsonEntity)的例程和效果。

      如上,Role實體對象可通過ToJson轉為json字符串,并通過ToJsonEntity把字符串轉為另一個Role實體對象。

      在XCode v9.0之前,實體基類Entity直接帶有ToJson/FromJson。后來因為Json實在太常用了,提升為全局擴展方法。

       

      Json作為最通用的數據傳輸格式(沒有之一),ToJson直接擴展Object,有三個參數:是否換行縮進、是否寫空值、是否駝峰命名

      上文示例中的ToJson(true, false, false)表示采用換行縮進(可讀性更好),不寫空值(整數的0和字符串的null等),不適用駝峰命名。

        

      Xml序列化

       Xml作為曾經的數據傳輸格式之王,仍然有相當一部分古老接口使用。

      ToXml/ToXmlEntity 也是全局擴展方法,其中參數可以控制序列化為普通Xml或者Xml屬性。

      從結果來看,Xml可讀性非常好,但是占用空間很大,一般比Json還要大一截。

       

      二進制序列化

       XCode序列化的絕招是二進制序列化,能夠讓實體對象和二進制數據互相轉換,更小、更快!

      序列化同樣的實體對象,只需要39字節,遠小于Json和Xml,并且速度更快(不需要字符串分割操作)。

      實體對象沒有ToBinary之類的快速方法,而是需要先轉化為IAccessor接口,然后Write序列化為數據流,或者Read讀取數據流。

      數據流是個好東西,最常用的有內存流、文件流、網絡流、加密流、壓縮流,等等等。

      文件流FileStream,可以讓實體對象保存為文件,或者文件加載為實體對象,(借助文件緩存實體數據?);

      網絡流NetworkStream,可以讓實體對象在網絡中傳輸;

       

      IAccessor 訪問器接口,可實現任意對象到數據流的讀寫訪問。

      NewLife.Redis 優先支持 IAccessor 接口,因此,把XCode實體對象寫入Redis時,采用的是二進制高效精簡格式,而不是默認的Json格式

       

      實體類可通過重載 OnWrite 來自定義二進制序列化的行為。

      /// <summary>二進制序列化到數據流</summary>
      /// <param name="stream">數據流</param>
      /// <param name="context">上下文</param>
      /// <param name="extend">是否序列化擴展屬性</param>
      protected virtual Boolean OnWrite(Stream stream, Object context, Boolean extend)
      {
          var bn = context as Binary;
          if (bn == null) bn = new Binary
          {
              Stream = stream,
              EncodeInt = true
          };
      
          var fs = extend ? Meta.AllFields : Meta.Fields;
          foreach (var fi in fs)
          {
              bn.Write(this[fi.Name], fi.Type);
          }
      
          return true;
      }

      從上面代碼可以看出,只是調用二進制序列化Binary來把各個數據字段寫入流中。

       

      看到這里,你是不是有很多可以大干一場的想法?別急,這只是開胃菜,還有更好的。

       

      示例中看到,二進制序列化最大缺點是可讀性極差!一般只能看到其中部分字符串。

       

      實體列表存儲

       單個實體對象的二進制序列化只適用于簡單場合,如寫入Redis,實際工程級應用,多以實體列表為主。

      實體列表存儲以擴展方法提供:

      • Write,寫入實體列表到數據流
      • Read,從數據流加載實體列表
      • SaveFile,保存實體列表到文件(可用作數據緩存)
      • LoadFile,從文件加載實體列表

      以上示例演示了具有4個對象的角色列表如果讀寫數據流以及文件。

       

       有朋友要問,能否借助實體列表讀寫文件的功能,實現某些數據表的本地化緩存,即使數據庫宕機,仍然能夠繼續提供服務?

      答案顯然是可以的,并且我在實際工作中也經常這么干。

       

      數據分析中經常需要用到幾十上百臺服務器進行分析計算,應用啟動時必須把配置數據和常用基礎數據一次性載入內存,例如幾萬行的網點數據;

      如果幾十個節點同時啟動向數據庫請求網點數據,數據庫將不堪重負變得非常緩慢,影響計算應用的加載甚至可能導致出錯退出;

      這種場景,可以在加載一次后,把實體列表數據保存到本地文件中,然后定時(10分鐘)更新;

      下次啟動時,直接使用本地緩存數據,大大提升了應用啟動速度,并且降低了數據庫負擔;

       

      Csv導入導出

       Csv格式常用于辦公室Excel數據傳遞,以及數據庫數據導入導出等。

      XCode支持百萬級導出!內部 CsvFile 支持流式讀寫,一邊構造一邊寫入文件,而不是一次性在內存生成好再寫入!

       

      魔方的 Excel導出、Csv導出、Json導出、Xml導出等功能,都由 XCode 實現!

       

      系列教程

      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-06-27 23:29  大石頭  閱讀(3049)  評論(13)    收藏  舉報
      主站蜘蛛池模板: 久久99久国产精品66| 国产精品偷乱一区二区三区| 性按摩玩人妻hd中文字幕| 五月开心六月丁香综合色啪| 亚洲欧美成人一区二区在线电影| 精品福利一区二区三区免费视频 | 国产午夜成人久久无码一区二区| 久久99精品中文字幕在| 91色老久久精品偷偷蜜臀| 伊人久久大香线蕉AV网| 国产综合久久久久鬼色| 亚洲AV色香蕉一区二区蜜桃小说| 韩国精品福利视频一区二区| 色综合视频一区二区三区| 国产亚洲欧洲av综合一区二区三区| 东平县| 极品一区二区三区水蜜桃| 韩国无码AV片午夜福利| 国产精品入口中文字幕| 人人入人人爱| 国产精品女同一区三区五区| 成人精品久久一区二区三区| 国产亚洲精品久久久久久青梅| 久久成人成狠狠爱综合网| 92精品国产自产在线观看481页 | 久久人与动人物a级毛片| 女高中生强奷系列在线播放| 国产91丝袜在线观看| 亚洲伊人久久综合影院| 好吊视频在线一区二区三区| 亚洲 欧美 唯美 国产 伦 综合| 精品国产午夜福利理论片| 国产四虎永久免费观看| 亚洲精品在线二区三区| 亚洲av激情五月性综合| 国产老女人免费观看黄A∨片| 九九热在线免费播放视频| 三级三级三级A级全黄| 亚洲自拍偷拍福利小视频| 老司机aⅴ在线精品导航| 亚洲精品欧美综合二区|