在ASP.NET Core2上操作MongoDB,自动分库分表,这么酷炫的操作真的可行吗?

摘要:NoSQL是泛指非关系型的数据库,现今在我们的项目中也多有使用,其独特的优点为我们的项目架构带来了不少亮点,而我们这里的主角(MongoDB)则是NoSQL数据库家族中的一种。事实上,NoSQL数据库的应用场景有很多,其最主要的目的就是为了
NoSQL是泛指非关系型的数据库,现今在我们的项目中也多有使用,其独特的优点为我们的项目架构带来了不少亮点,而我们这里的主角(MongoDB)则是NoSQL数据库家族中的一种。事实上,NoSQL数据库的应用场景有很多,其最主要的目的就是为了能解决大规模数据集合多重数据种类带来的困难,及大数据应用的难题。 MongoDB MongoDB是一个开源的文档型数据库,由C++语言编写,采用分布式的文件存储方案,而文件的存储格式为BSON。MongoDB支持的数据类型有很多种,如:String、Int、Float、Timestamp、Binary、Object、Date、Arrays等。而MongoDB的特点也有很多,如:强大的查询语言、支持索引、支持自动处理碎片、支持JAVA/C#/Python等多种开发语言、支持面向集合存储等。关于MongoDB的具体描述也可自行到其官网查看,我这里就不再过多啰嗦了,下面贴出与其几个相关的网址吧: MongoDB官网:https://www.mongodb.com/ MongoDB官方的.NET API文档:http://api.mongodb.com/csharp/current/html/R_Project_CSharpDriverDocs.htm MongoDB官方的github网址:https://github.com/mongodb/mongo MongoDB可视化管理工具NoSQL Manager for MongoDB的官网:https://www.mongodbmanager.com/ 背景 在大部分的项目中都会遇到要将短消息类型的数据(比如企业系统内的用户操作行为的“操作日记”数据、聊天通讯系统内的“对话记录”等数据)做持久化,而这种数据的特征就是关系简单、数据量庞大、大部分只有读写操作等。基于这些业务需要与应用场景,那么我们就可以考率使用MongoDB来做数据的持久化存储与管理了。 在这里,我们将模拟一个基于Saas平台下的企业系统内“操作日记”的业务场景(项目将以Saas服务提供给各个企业使用,并将所有用户在系统上的操作行为以日记方式存储到数据库去),并使用MongoDB来做数据的持久化存储与管理(包含对数据的增加与查询操作)。这里我们为了简便则将代码的结构层次分为两层(实际项目中各位按需分层级),那么项目结构将是这个样子的: 1、Lezhima.Web:接受来自客户端的请求,及服务端响应的出入口。由一个基于ASP.NET Core的MVC项目组成。 2、Lezhima.Data:直接跟MongoDB进行通讯交互,实现对DB的增、查等操作。由一个基于.NET Core的类库组成。 业务规则: 基于上述的应用场景所悉,我们将面向的是企业客户,且是以Saas服务运行在云上的,则我们操作管理MongoDB时将面临如下几个规则(基于海量数据的读写考率): 1、希望数据能按企业ID分库,即各个企业的数据归档到其对应的独立库中。 2、能根据日期每天分表存储数据。 3、分库能按企业ID自动完成,分表能按日期自动完成。 与MongoDB通讯的API类库: 我们将使用由MongoDB官方提供的API类库来与MongoDB进行通讯与交互,在Lezhima.Data项目中可通过NuGet管理器引用如下两个类库: 1、MongoDB.Bson 2、MongoDB.Driver 实现代码 通过上面的介绍,我们清楚了两个分层之间的功能与关系,那么接下来我们就分别来看看它们具体的代码,及操作MongoDB的简便酷爽吧。
阅读全文