RavenDB官网文档翻译系列第一
本系列文章主要翻译自RavenDB官方文档,有些地方做了删减,有些内容整合在一起。欢迎有需要的朋友阅读。毕竟还是中文读起来更亲切吗。下面进入正题。
起航
获取RavenDB
RavenDB可以通过NuGet获取,也可以直接在RavenDB官网下载压缩包。
首先了解下压缩包中的内容,可以更好的根据需要进行选择。
- Backup – 包含用于备份的Raven.Backup工具
- Bundles – 包含所有非内置的插件,如Authentication和Encryption。
- 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完成那些工作
示例
下面列出可用的示例程序:
演练服务器
如果对此感兴趣,请查看这篇文章。
RavenDB官网文档翻译系列第一的更多相关文章
- RavenDB官网文档翻译系列第二
索引>查询>处理文档关联 处理文档关联 RavenDB坚持的一个设计原则就是文档是独立的,这就是说处理一个文档所需的所有数据都存储在文档本身之中.然而,这不是说对象之间不应存在联系. 在许 ...
- Quartz.NET快速上手第一课(官网文档翻译)
Quartz.NET快速上手第一课(官网文档翻译) 原文链接 在你使用调度者(scheduler)之前,你需要对它进行实例化(谁能猜到这呢?).在实例化scheduler时候,你需要使用ISchedu ...
- Flink官网文档翻译
http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...
- Knockoutjs官网翻译系列(一)
最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架.作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯 ...
- Knockout.Js官网学习(系列)
1.Knockout.Js官网学习(简介) 2.Knockout.Js官网学习(监控属性Observables) Knockout.Js官网学习(数组observable) 3.Knockout.Js ...
- 学习phalcon框架按照官网手册搭建第一个项目注册功能
中文手册官网:http://phalcon.ipanta.com/1.3/tutorial.html#bootstrap 官网提供http://www.tutorial.com项目源码github地址 ...
- Nginx 官网文档翻译汇总
Nginx 官网文档,各个模块的手册在这里. Nginx 中文文档 - 淘宝翻译 改版后的新 Nginx 官网文档 概述 新手指南 控制 Nginx 管理员指南 Admin Guide 安装 基本功能 ...
- Jenkins 官网文档翻译汇总
Jenkins 官网地址 Jenkins 官网文档地址 用户手册 安装 Jenkins 使用 Jenkins 使用凭证 Pipeline 流水线 开始使用 Pipeline 使用 Jenkinsfil ...
- Knockoutjs官网翻译系列(四) computed中依赖追踪是如何工作的
初学者无需了解这些 ,但是很多高级程序员想知道我们为什么可以保持跟踪这些依赖以及可以正确的更新到UI中.它其实很简单.跟踪算法是这样的: 无论何时你定义了一个computed observable,K ...
随机推荐
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...
- 【Win 10 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
- KV存储系统
现在的KV存储系统都是分布式的,首先介绍Zookeeper——针对大型分布式系统的高可靠的协调系统. 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”.“部分失败”是指信息 ...
- [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute
剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...
- 深入浅出JavaScript之原型链&继承
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...
- python 数据类型 ---文件一
1.文件的操作流程: 打开(open), 操作(read,write), 关闭(close) 下面分别用三种方式打开文件,r,w,a 模式 . "a"模式将不会覆盖原来的文件内容, ...
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- BPM配置故事之案例4-子表
公司渐渐对采购管理重视起来了,新招聘了采购主管老李,老李对现有的申请表很不满意,要求将申请物资和申请原因改成物资明细表 物资明细表 小明只好继续致电大毛-- 大毛:把申请物资和申请原因删掉,新增一个数 ...