<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        RavenDB在傳統C/S應用下的一點實踐

        來源:懂視網 責編:小采 時間:2020-11-09 09:45:19
        文檔

        RavenDB在傳統C/S應用下的一點實踐

        RavenDB在傳統C/S應用下的一點實踐:RavenDB介紹 RavenDB是一個基于.NET開發的NoSQL數據庫。下面是官方介紹的一個簡單翻譯: RavenDB is a transactional, open-source Document Database written in .NET, offering a flexible data model desig
        推薦度:
        導讀RavenDB在傳統C/S應用下的一點實踐:RavenDB介紹 RavenDB是一個基于.NET開發的NoSQL數據庫。下面是官方介紹的一個簡單翻譯: RavenDB is a transactional, open-source Document Database written in .NET, offering a flexible data model desig

        RavenDB介紹 RavenDB是一個基于.NET開發的NoSQL數據庫。下面是官方介紹的一個簡單翻譯: RavenDB is a transactional, open-source Document Database written in .NET, offering a flexible data model designed to address requirements coming from real-

        RavenDB介紹

        RavenDB是一個基于.NET開發的NoSQL數據庫。下面是官方介紹的一個簡單翻譯:

        RavenDB is a transactional, open-source Document Database written in .NET, offering a flexible data model designed to address requirements coming from real-world systems.

        RavenDB allows you to build high-performance, low-latency applications quickly and efficiently.

        RavenDB是一個用.NET編寫的事務性開源文檔數據庫,提供靈活的數據模型,設計用于解決來自真實世界系統的需求。

        RavenDB允許你快速而高效地構建高性能、低延遲的應用程序。

        更多介紹可以瀏覽官方網站的介紹: 場景介紹

        由于NoSQL一般是用于Web場景,比如Web應用程序(尤其MVC Web應用程序),或者Web服務(包括REST服務等)。最近,香港服務器租用,需要實現一個簡單的數據編輯工具,不過由于某些原因,這個工具必須和一個桌面的Windows Forms應用程序集成在一起,且也要滿足多個用戶同時操作數據的需求。對于這種標準的C/S模式的應用,能否使用RavenDB這樣的NoSQL來作為Server端的數據庫呢?

        答案當然是可以的。畢竟RavenDB本身就支持兩種運行模式:嵌入模式(Embedded)和服務器模式(Server)。對于C/S的應用,很自然就是把RavenDB部署在一個服務器上,運行于Server模式,然后在客戶端通過.NET Client API來訪問。

        遇到問題

        在這個C/S應用程序中使用RavenDB的過程中,遇到的最大的問題,還是RavenDB本身的一些特性所帶來的限制,分別為:

      1. 每次獲取的數據量有限制。RavenDB規定每次獲取的數據量默認為128條,最多可配置為1024條。對于我這個工具的數據量,就是5000條左右,其實如果使用其他數據庫技術的話(比如Entity Framework),且也在局域網內,完全可以一次性載入到內存中。然而使用RavenDB就必須考慮分頁處理。
      2. 每個Session能夠調用的次數有限制。RavenDB規定每個Session調用服務端的最大次數是30,并且推薦最好控制在1次左右。由于有這樣的規定,就無法在整個客戶端應用程序的生存期內保持一個共享的session。 對于EF也不存在這樣的限制。
      3. 搜索是基于Lucene的。對于字符串進行Contain操作會出錯,這是由于對于類似的全文搜索,RavenDB都是依賴于Lucene的。因而需要預先定義搜索的索引,并使用單獨的Search方法。
      4. RavenDB內置的Lucene分詞器對于中文的支持有問題。就需要單獨使用其他中文分詞器。
      5. 解決方式

        針對以上的限制,并結合我這個C/S小工具的一些特點,使用了如下解決方式:

      6. 結合BindingNavigator和BindingSource,編寫了一個自動分頁的工具類(RavenDBDataSource),可以讓BindingNavigator的前后導航按鈕實現分頁導航,還可以支持條件過濾(Where)和全文搜索(Search)后的分頁。具體用法見下“RavenDBDataSource解析和用法”。
      7. 雖然不能保持一個共享的Session,但是可以保持一個共享的Store對象,在每次需要獲取數據或更新數據的時候,創建單獨的Session。不過需要注意的是,由于沒有共享Session,會導致之前取回的數據丟失變更跟蹤,需要自己進行跟蹤與提交。見下面的“如何保存數據變更”。
      8. 我從Lucene.NET的網站下載了Contri包,直接使用了里面的“Lucene.Net.Analysis.Cn.ChineseAnalyzer”,即把Lucene.Net.Contrib.Analyzers.dll文件放到RavenDB\Server\Analyzers目錄里面。把當然有興趣的同學也可以使用ICTCLAS的Lucene實現。
      9. 預定義全文搜索索引的話,我的方式是在連接數據庫后,檢查是否存在所需索引,不存在就用代碼創建。當然也可以通過Studio來創建。見下”創建索引”。
      10. RavenDBDataSource解析和用法

        代碼見:https://github.com/heavenwing/redmoon/blob/master/RavenDBDataSource.cs

        這個類提供了一個構造器public RavenDBDataSource(IDocumentStore store, BindingNavigator bn, BindingSource bs),可以接受IDocumentStore 、BindingNavigator 和BindingSource 作為參數。其中會對bn進行一些初始化處理。

        提供了一個重載的Load方法,可以無參數,或者接受Func, IRavenQueryable> criteria, string indexName = ""兩個參數。criteria用來對查詢進行構造,indexName顧名思義,在進行Search操作的時候就需要傳入預先定義的索引的名稱。在Load方法中,會對調用代碼構造好的查詢進行執行,根據PageSize的設置進行分頁查詢,把查詢結果賦值給BindingSource來提示和BindingSource綁定的控件(如DataGridView)進行刷新。在進行分頁查詢的同時,也會更新當前的頁碼。

        其中BindingNavigator 對象的PositionItem的TextChanged事件處理,會觸發Load事件。為了避免頻率過高的執行,我使用了一個自定義的事件延遲器(見:https://github.com/heavenwing/redmoon/blob/master/DelayEvent.cs),當然也可以使用RX來進行延遲。

        具體用法就很簡單:實例化一個用于具體實體類的RavenDBDataSource,然后調用Load方法,在Load方法中構造查詢。如:

        private void LoadProcessData() { if (_dsProcess == null) _dsProcess = new RavenDBDataSource(_store, bnProcess, bsProcess); var txt = tstbSearchForProcess.Text.ToLower(); if (string.IsNullOrEmpty(txt)) { if (tscbSource.SelectedIndex == 0) { if (tscbRelatedCount.SelectedIndex < 5) _dsProcess.Load(query => query .Where(o => o.RelatedCount == tscbRelatedCount.SelectedIndex) .OrderBy(o => o.ProductName)); else _dsProcess.Load(query => query .Where(o => o.RelatedCount >= 5) .OrderBy(o => o.ProductName)); } else { if (tscbRelatedCount.SelectedIndex < 5) _dsProcess.Load(query => query .Where(o => o.Source == tscbSource.Text && o.RelatedCount==tscbRelatedCount.SelectedIndex) .OrderBy(o => o.ProductName)); else { _dsProcess.Load(query => query .Where(o => o.Source == tscbSource.Text && o.RelatedCount >= 5) .OrderBy(o => o.ProductName)); } } } else { _dsProcess.Load(query => query .Search(o => o.ProductName, txt) .OrderBy(o => o.ProductName), index1Name ); } }

        上述代碼中,可以同時對多個屬性進行過濾(Where),也可通過設定索引名稱(index1Name)對一個或多個屬性進行搜索(Search)。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        RavenDB在傳統C/S應用下的一點實踐

        RavenDB在傳統C/S應用下的一點實踐:RavenDB介紹 RavenDB是一個基于.NET開發的NoSQL數據庫。下面是官方介紹的一個簡單翻譯: RavenDB is a transactional, open-source Document Database written in .NET, offering a flexible data model desig
        推薦度:
        標簽: 應用 傳統 一點
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久亚洲AV成人无码网站 | 亚洲AV无码专区在线播放中文| 亚洲最大激情中文字幕| 亚洲AV日韩AV永久无码久久| 两个人日本WWW免费版| 日韩插啊免费视频在线观看| 日韩中文字幕免费视频| 添bbb免费观看高清视频| 亚洲一区中文字幕| 美女又黄又免费的视频| 国产成人高清亚洲| 国拍在线精品视频免费观看| 成年人免费网站在线观看| 亚洲国产成人久久笫一页| 亚洲高清中文字幕| 猫咪免费人成在线网站| 亚洲色偷拍区另类无码专区| 色播在线永久免费视频网站| 国产精品极品美女免费观看| 久久精品国产精品亚洲色婷婷 | 香蕉视频亚洲一级| 免费无码又爽又刺激高潮视频| 亚洲成aⅴ人片在线观| 国内精品久久久久影院免费| 国产成人精品男人免费| 一级日本高清视频免费观看| 欧美男同gv免费网站观看| 亚洲av无码成人影院一区| 久久久久久久国产免费看| 日韩免费无码视频一区二区三区| 亚洲欧洲在线观看| 最近高清中文字幕免费| 国产亚洲精品线观看动态图| 欧洲精品码一区二区三区免费看| 亚洲人JIZZ日本人| 91在线免费视频| 亚洲一卡2卡4卡5卡6卡在线99| 国产在线19禁免费观看| 国产免费爽爽视频在线观看 | 69xx免费观看视频| 亚洲理论在线观看|