Adhesive问答之Mongodb数据服务

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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
相关文章
|
2天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB写入数据的过程
在MongoDB数据更新时,WiredTiger存储引擎通过预写日志(Journal)机制先将更新写入日志文件,再通过检查点操作将日志中的操作刷新到数据文件,确保数据持久化和一致性。检查点定期创建,缩短恢复时间,并保证异常终止后可从上一个有效检查点恢复数据。视频讲解及图示详细说明了这一过程。
40 23
【赵渝强老师】MongoDB写入数据的过程
|
3月前
|
存储 NoSQL MongoDB
数据的存储--MongoDB文档存储(二)
数据的存储--MongoDB文档存储(二)
89 2
|
6月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
7月前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
294 1
|
3月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
3月前
|
NoSQL MongoDB 数据库
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
使用NimoShake将数据从AWS DynamoDB迁移至阿里云MongoDB
|
3月前
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
115 3
|
5月前
|
NoSQL 安全 MongoDB
【MongoDB深度揭秘】你的更新操作真的安全了吗?MongoDB fsync机制大起底,数据持久化不再是谜!
【8月更文挑战第24天】MongoDB是一款备受欢迎的NoSQL数据库,以其灵活的文档模型和强大的查询能力著称。处理关键业务数据时,数据持久化至关重要。本文深入探讨MongoDB的写入机制,特别是更新操作时的fsync行为。MongoDB先将数据更新至内存以提升性能,而非直接写入磁盘。fsync的作用是确保数据从内存同步到磁盘,但MongoDB并非每次更新后都立即执行fsync。通过设置不同的写入关注级别(如w:0、w:1和w:majority),可以平衡数据持久性和性能。
60 1
|
5月前
|
监控 NoSQL MongoDB
mongodb查询100万数据如何查询快速
综上,提高MongoDB百万级数据的查询性能需要综合多项技术,并在实际应用中不断调优和实践。理解数据的特征,合理设计索引,优化查询语句,在数据访问、管理上遵循最佳的实践,这样才能有效地管理和查询大规模的数据集合。
280 1
|
5月前
|
NoSQL MongoDB 数据库
DTS 的惊天挑战:迁移海量 MongoDB 数据时,捍卫数据准确完整的生死之战!
【8月更文挑战第7天】在数字化时代,大数据量的MongoDB迁移至关重要。DTS(数据传输服务)通过全面的数据评估、可靠的传输机制(如事务保证一致性)、异常处理(如回滚或重试),以及迁移后的数据校验来确保数据准确无损。DTS还处理数据转换与映射,即使面对不同数据库结构也能保持数据完整性,为企业提供可靠的数据迁移解决方案。
76 2