Adhesive问答之Mongodb数据服务

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: Q:Mongodb数据服务有什么用? A:首先,Mongodb适合保存大量的非业务数据,因此,Adhesive框架提倡把不是非常重要的非业务数据(比如应用程序信息中心的日志、异常、状态数据,又比如WCF扩展模块的WCF调用数据,或者其它的各种业务日志、监控日志)保存在Mongodb中。

Q:Mongodb数据服务有什么用?

A:首先,Mongodb适合保存大量的非业务数据,因此,Adhesive框架提倡把不是非常重要的非业务数据(比如应用程序信息中心的日志、异常、状态数据,又比如WCF扩展模块的WCF调用数据,或者其它的各种业务日志、监控日志)保存在Mongodb中。虽然Mongodb的非结构化模式适合保存各种类型的数据,但是我们不得不针对各种类型的数据进行重复开发来解决一些问题:

1)往往大量的数据希望是后台队列异步提交的,并且还需要容忍服务端和数据库的短时间不可用,因此需要开发一套客户端和服务端的双队列。

2)在数据保存到数据库的时候需要考虑分表和分库,数据保存后需要考虑索引的建立、历史数据的删除。

3)最重要的是,数据不是保存就了事了,我们还需要针对不同的数据开发一套后台,涉及到权限、各种方式的浏览。

在以前,我们针对每一个业务都需要进行短则一周,长则一个月的开发,开发一套客户端收集数据的程序、开发一套服务端提交数据的程序、再开发一套后台程序。

而现在,Mongodb数据服务负责搞定这所有的一切,可以这么说,如果希望把自定义的任何数据通过Mongodb数据服务保存到Mongodb中去的话,您只需要

1)花10分钟左右来涉及自定义类,并且为属性应用一些特性来告诉Mongodb数据服务如何保存和呈现这些数据。

2)花5分钟左右来配置权限、客户端、服务端等等。

3)花10秒的时间,调用一行语句进行入库。

不管是什么程序日志、业务日志,不到20分钟时间的开发,您就可以在Mongdb数据服务的后台以各种方式看到数据。

 

Q:Mongodb数据服务的亮点在哪里?

A:除了上面说的,可以节省开发时间之外,其它亮点如下:

1)可以进行简单的配置来完成相对比较复杂的组合查询,比如要实现类型这样的搜索:

image

只需要定义元数据即可:

        [MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "借书者",  ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.TextBoxFilter)]
        public string UserName { get; set; }

        [MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "状态变化", ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.DropDownListFilter)]
        public Status Status { get; set; }

        [MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "书籍分类", ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.CheckBoxListFilter)]
        public string Category { get; set; }

又比如我们希望记录一个操作日志:

image

元数据定义如下:

        [MongodbPersistenceItem(ColumnName = "A", MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "行为", ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.DropDownListFilter)]
        public string Action { get; set; }

        [MongodbPersistenceItem(ColumnName = "C", MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "分类", ShowInTableView = true, MongodbCascadeFilterOption = MongodbCascadeFilterOption.LevelOne)]
        public string CategoryName { get; set; }

        [MongodbPersistenceItem(ColumnName = "D", MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "数据库", ShowInTableView = true, MongodbCascadeFilterOption = MongodbCascadeFilterOption.LevelTwo)]
        public string DatabaseName { get; set; }

        [MongodbPersistenceItem(ColumnName = "TN", MongodbIndexOption = MongodbIndexOption.Ascending)]
        [MongodbPresentationItem(DisplayName = "表", ShowInTableView = true, MongodbCascadeFilterOption = MongodbCascadeFilterOption.LevelThree)]
        public string TableName { get; set; }

这里可以看到,在后台不但呈现出了这些搜索控件,并且也填充了内容。由于考虑到性能,这些Distinct的数据不是通过Mongodb的Distinct功能完成的,而是在插入数据的时候统计这些数据,定时双向同步到Mongodb中的元数据表:

image

2)丰富的查询方式:

image

列表:

image

数据量统计:

image

分组统计:

image

详细:

image

不管是希望看列表、看数据量统计、看数据分组统计还是详细数据都可以满足要求,不许开发一行代码。

3)系统自己会处理分表、分库、过期数据、索引、缓存、队列等等。。。

 

Q:Mongodb数据服务的应用范围在哪里?

A:一般Mongodb适合保存非业务数据,由于Mongodb数据服务模块使用的是客户端和服务端的双队列,因此即使数据量再大也不会影响正常业务的进行,但数据可能会在服务不可用并且队列满的时候丢失。因此保存程序日志、业务日志、操作日志、监控数据、异常信息、反馈信息等等数据非常适合。需要说明的是,Adhesive框架的应用程序信息中心模块以及WCF分布式服务模块的所有日志都采用Mongodb数据服务进行保存。

 

Q:如何自定义对象以及使用Mongodb数据服务?

A:参见文章http://www.cnblogs.com/lovecindywang/archive/2011/10/28/2227808.html

 

Q:在自定义对象上配置的元数据改动了会怎么样?

A:从客户端方面来说每一种类型的元数据元数据会随着第一条数据提交到服务端,并且只会提交一次,因此如果你改了元数据,肯定是需要重新启动系统的,在启动后新的元数据会保存到数据库中,从服务端方面来说,元数据不会每次都从数据库获取,只是在“维护”的时候同步一次,默认的维护时间是1分钟,因此元数据修改后1分钟后可以在后台看到效果。

1)如果删除了列,那么列的元数据也会丢失,在后台可能就不会看到这个列了,但是老的数据不会丢失。

2)如果增加了以及列的元数据,那么相关列的值对于老的数据可能就是空,只会在新数据出现新的列。

3)如果要对既有列修改元数据的话,不能修改MongodbPersistenceItem的ColumnName也就是数据库中的列名,否则老的数据都会显示不出来。

 

Q:Mongodb数据服务的结构是怎么样的?

A:Mongodb数据服务写入数据的流程如下:插入数据到客户端队列-客户端队列取出数据提取元数据进行数据重组-客户端队列通过WCF分布式服务模块提交数据到服务端队列-服务端队列-服务端队列取出数据进行索引项更新-服务端队列把数据提交到数据库

Mongodb数据服务读取数据的流程如下:通过WCF分布式服务模块连接服务端读取数据-服务端从数据库取出实际的数据-服务端从内存中获取元数据-服务端把实际数据和元数据进行合并并返回客户端

Mongodb数据服务的服务端有一个很重要的维护服务,它的工作如下:

1)同步元数据

2)同步列的索引数据(比如高级数据筛选下拉框和多选框的内容)

3)清空历史数据(如果设置了过期天数的话)

4)从数据库获取数据库服务器、数据库、表、索引四个层次的实际状态

5)建立索引

 

Q:Mongodb数据服务的配置需要注意哪些地方?

A:注意点如下:

1)在新定义自定义类型之后需要在配置服务中配置数据项,否则数据无法提交到服务端也无法提交到数据库

2)定义在列上的特性注意冲突和一些约束,尽量

3)适当清空下修改默认的参数(比如队列提交批次、最大数据条数)来改善性能

 

Q:Mongodb数据服务需要怎么配置Mongodb?

A:我们的每一个类型可以配置不同的服务器集群,因此在一定程度上可以实现方便的扩容:

image

考虑到分担压力,系统默认支持读(后台查询)写(提交数据以及维护)分离,因此可以配置MASTER-SALVE的Mongodb

image

需要注意的是,在理论情况下,后台进行的所有操作都不会进行表扫描,在索引未创建完成的情况下,是不会出现相关的搜索控件的,因此可以配置Mongodb为不允许表扫描:

image

 

Q:Mongodb数据服务可以使用老的Mongodb集群吗?

A:可以,Mongodb数据服务通过Metadata数据库来知道哪些是自己的数据库,其它数据库不会去管理,后台也看不到。

作者: lovecindywang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
运维 安全 NoSQL
游戏安全资讯精选 2017年 第六期:Akamai报告称游戏是流量型攻击的主要受害者,英国二手游戏经销商CeX漏洞遭利用,MongoDB等数据服务被劫持勒索风险预警,网络安全上榜五大稀缺职业
Akamai报告称游戏是流量型攻击的主要受害者,英国二手游戏经销商CeX漏洞遭利用,MongoDB等数据服务被劫持勒索风险预警,网络安全上榜五大稀缺职业
2495 0
|
NoSQL .NET 索引
Adhesive框架系列文章--Mongodb数据服务使用实践
在此文中,我们会实践一下,如何使用Mongodb数据服务存储新的自定义数据。之前我们说过了,使用Mongodb数据服务只有4步这么简单: 1)定义实体 2)定义元数据 3)配置Mongodb数据服务 4)调用API插入数据 在这里,我们希望使用Mongodb存放书籍借阅的信息: p...
849 0
|
缓存 NoSQL 数据库
Adhesive框架系列文章--Mongodb数据服务模块实现(下)
在本文中我们会着重介绍一下Mongodb数据服务查询部分的实现,也就是通用后台用到的查询服务。 首先,为了性能考虑,我们的每一个Mongodb集群都可以支持主从分离,也就是查询可以使用Slave的Mongodb: 其中的同步延迟配置,用于配置在查询的时候缓存多久之前的数据,因为同步的延迟问题,缓存太新的数据很可能导致数据不完整。
968 0
|
存储 监控 NoSQL
Adhesive框架系列文章--Mongodb数据服务模块使用(上)
之前介绍的应用程序信息中心模块中所有日志、异常、性能和状态数据都依赖Mongodb数据服务,Mongodb数据服务的接口也简单的可以: public interface IMongodbInsertService : IDisposable { void Insert(object item); } 总之一点,不管什么数据,提交进来即可!在提交之前所要做的只是设计数据实体 ,并且为实体标注一些元数据Attribute,来告诉Mongodb数据服务,希望怎么样保存数据,又希望怎么样呈现数据。
1025 0
|
监控 NoSQL 数据库
Adhesive框架系列文章--Mongodb数据服务模块使用(下)
在前一篇中,我们介绍的主要是站在开发人员的角度如何使用Mongodb数据服务来保存数据,这一篇会介绍在保存数据之后,如何去查看数据,也就是怎么样去使用Mongodb数据服务的通用后台。 Mongodb数据服务的后台是采用Silverlight4制作的。
1227 0
|
JSON 缓存 NoSQL
Adhesive框架系列文章--Mongodb数据服务模块实现(上)
Mongodb数据服务可以直接接受任何类型数据,并且它设计为可以承受大量数据的写入。为了能保存任何类型的数据,并且在后台可以查看任何类型的数据,因此我们必须在收到数据的时候对数据的元数据进行提取,随同主体数据一并保存在数据库中。
925 0
|
3月前
|
JSON NoSQL 小程序
Mongodb数据库的导出和导入总结
Mongodb数据库的导出和导入总结
189 0
|
1月前
|
NoSQL 网络协议 MongoDB
Windows公网远程连接MongoDB数据库【无公网IP】
Windows公网远程连接MongoDB数据库【无公网IP】
|
1月前
|
存储 NoSQL 关系型数据库
一篇文章带你搞懂非关系型数据库MongoDB
一篇文章带你搞懂非关系型数据库MongoDB
55 0
|
1月前
|
人工智能 NoSQL MongoDB