热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据服务FAQ

Q:Mongodb数据服务有什么用?A:首先,Mongodb适合保存大量的非业务数据,因此,Adhesive框架提倡把不是非常重要的非业务数据(比如应用程序信息中心的日志、异常、状态数据,又比如WCF扩展模块的WCF调用数据,或者其它的各种业务日志、监控日志)保存在Mo

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)可以进行简单的配置来完成相对比较复杂的组合查询,比如要实现类型这样的搜索:

只需要定义元数据即可:

        [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; }

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

元数据定义如下:

        [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中的元数据表:

2)丰富的查询方式:

列表:

数据量统计:

分组统计:

详细:

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

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:我们的每一个类型可以配置不同的服务器集群,因此在一定程度上可以实现方便的扩容:

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

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

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

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


推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • 使用 jQuery 实现页面加载进度条
    页面加载进度条是提升用户体验的重要工具,通过在页面头部显示一个加载状态,并在页面完全加载后隐藏,可以有效减少用户的等待焦虑。本文将详细介绍如何使用 jQuery 实现这一功能。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
author-avatar
匿名用户
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有