热门标签 | 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数据库来知道哪些是自己的数据库,其它数据库不会去管理,后台也看不到。


推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
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社区 版权所有