zoukankan      html  css  js  c++  java
  • 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完成那些工作

    示例

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

    演练服务器

    如果对此感兴趣,请查看这篇文章。

     

     

  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/4537880.html
Copyright © 2011-2022 走看看