RavenDB官網文檔翻譯系列第一


 

本系列文章主要翻譯自RavenDB官方文檔,有些地方做了刪減,有些內容整合在一起。歡迎有需要的朋友閱讀。畢竟還是中文讀起來更親切嗎。下面進入正題。

起航

 

獲取RavenDB

 

RavenDB可以通過NuGet獲取,也可以直接在RavenDB官網下載壓縮包。

首先了解下壓縮包中的內容,可以更好的根據需要進行選擇。

  • Backup  – 包含用於備份的Raven.Backup工具
  • Bundles – 包含所有非內置的插件,如AuthenticationEncryption
  • Client – 包含用於開發的所有.NET客戶端庫
  • Server – 所有服務器文件(包括Raven.Server.exe.config等配置文件)
  • Smuggler – 包含用於在服務器間導入導出數據的工具
  • Web – 所有用於IIS開發的文件

 

官網下載頁面還提供了安裝包,並給出了安裝包安裝文檔,圖文並茂比較易懂,這里就不翻譯了。安裝包使用文檔傳送門

 

啟動服務器

 

要想開始體驗RavenDB,一個運行的RavenDB服務是不可少的。在下載的壓縮包中包含一個Start.cmd文件,運行此文件會以控制台方式啟動一個服務器(調試模式),這種模式適合作為開發目的或簡單嘗試下各種功能而非發布服務器。當服務運行后,可以通過http://localhost:port/訪問管理工具。默認的端口號為8080,當8080被占用時會選擇下一個可用的端口號。

 

提示

如果需要將RavenDB安裝為服務請參考這篇文章。RavenDB也可以運行於IIS中或嵌入到可執行程序中。

 

客戶端

在下載的壓縮包的Client目錄下可以找到所有的.NET客戶端。在項目中引用相應的程序集后,可以在Raven.*命名空間下訪問到所有的類,其中DocumentStore是最值得關注的。這是你的應用訪問RavenDB的入口,它將建立並維護你的應用和服務器之間的連接。請參考介紹DocumentStore的幾篇文章:

  • document store是什么

  • 創建一個document store

  • 設置默認數據庫

提示

需要注意的是DocumentStore是一個重量級的對象,每個程序只應該有一個DocumentStore實例(單例)

有兩種使用DocumentStore操作數據的方式,第一(也是推薦的方式)是通過Session,第二是Commands,Commands是一種底層操作數據的方式,只應該在確有需求的情況下使用。Session和Commands兩者都包含同步和異步方法。

可以通過下面列出的文章可以更多:

  • 什么是Session,它如何工作?及打開一個Session

  • 什么是Commands?

 

示例

在繼續之前,我希望指出這里的大部分文章都是用Northwind數據庫。可以在這里查看如何部署這個數據庫的更多細節。

 

原理及一些示例

RavenDB是一個文檔型數據庫,所有存儲的對象都被稱作文檔。每一個文檔都是以JSON格式存儲,其中包含一個標識文檔的key,data及metadata。metadata包含各種各樣描述文檔的信息,如修改日期或collection的布局。

 

創建DocumentStore,打開Session,存儲及加載實體

下面的示例將演示怎樣創建DocumentStore,打開Session,存儲及加載一些實體。

using (IDocumentStore store = new DocumentStore
{
 Url = "http://localhost:8080/", // server URL
 DefaultDatabase = "Northwind" // default database
})
{
 store.Initialize(); // initializes document store, by connecting to server and downloading various configurations
 using (IDocumentSession session = store.OpenSession()) // opens a session that will work in context of 'DefaultDatabase'
 {
  Employee employee = new Employee
  {
   FirstName = "John",
   LastName = "Doe"
  };
  session.Store(employee); // stores employee in session, assigning it to a collection `Employees`
  string employeeId = employee.Id; // Session.Store will assign Id to employee, if it is not set
  session.SaveChanges(); // sends all changes to server
  // Session implements Unit of Work pattern,
  // therefore employee instance would be the same and no server call will be made
  Employee loadedEmployee = session.Load<Employee>(employeeId);
  Assert.Equal(employee, loadedEmployee);
 }
}

 

查詢

要實現查詢,必須使用索引。簡言之,索引是一個定義使用哪些字段(及什么值)來在文檔中查找的服務器端函數。整個索引過程是異步進行的,執行這個操作會很快得到響應結果,即使有大量數據被更新,然而這種實現方式下索引不一定是最新的。在繼續之前,建議閱讀下面文章:

這個示例假設你的數據庫包含Northwind示例數據。如果你不知道如何部署示例數據,請查看這篇文章。

/// <summary>
/// All _ in index class names will be converted to /
/// it means that Employees_ByFirstNameAndLastName will be Employees/ByFirstNameAndLastName
/// when deployed to server
/// 
/// AbstractIndexCreationTask is a helper class that gives you strongly-typed syntax
/// for creating indexes
/// </summary>
public class Employees_ByFirstNameAndLastName : AbstractIndexCreationTask<Employee>
{
 public Employees_ByFirstNameAndLastName()
 {
  // this is a simple (Map) index LINQ-flavored mapping function
  // that enables searching of Employees by
  // FirstName, LastName (or both)
  Map = employees => from employee in employees
         select new
       {
        FirstName = employee.FirstName,
        LastName = employee.LastName
       };
 }
}

 

關於文檔的一些點點滴滴

文檔被分為這么幾個部分:

  • Indexes部分中,你可以找到所有索引和查詢相關的理論。

  • Transformers部分包含服務器端轉換函數的信息,這些函數用來形成查詢結果。

  • Client API部分,包含客戶端中大部分函數的API參考及相關基本示例。

  • Server部分包含服務器管理,維護,配置,安裝及調試的信息。

  • Studio部分讓你了解可以使用Studio完成那些工作

 

示例

下面列出可用的示例程序:

 

演練服務器

如果對此感興趣,請查看這篇文章。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM