2022
我们一起努力

Mongodb审计(mongodb审计日志)

本文目录:

  • 1、云资料库详细资料大全
  • 2、哪位高手可以推荐几款通用的数据库管理工具
  • 3、云上MongoDB常见索引问题及最优索引规则大全
  • 4、数据库审计 支持审计数据库包括哪些?
  • 5、如何建立一个完整可用的安全大数据平台
  • 6、2019-02-05:金融风控系统设计 - 外汇管理风控系统

云资料库详细资料大全

云资料库是指被最佳化或部署到一个虚拟计算环境中的资料库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。根据资料库类型一般分为关系型资料库和非关系型资料库(NoSQL资料库)。

云资料库的特性有:实例创建快速、支持唯读实例、读写分离、故障自动切换、数据备份、Binlog备份、SQL审计、访问白名单、监控与讯息通知等。

基本介绍

中文名 :云资料库 外文名 :CloudDB 简称 :云库 简介 :基于SQL或访问对象进行操作 分类 :关系型资料库非关系型资料库(NoSQL资料库) 服务,优势,特性,套用场景,主流云资料库—关系型资料库,阿里云关系型资料库,亚马逊Redshift,亚马逊关系型资料库服务,主流云资料库—非关系型资料库(NOSQL),云资料库MongoDB版,亚马逊DynamoDB, 将一个现有的资料库最佳化到云环境有以下好处: ·可以使用户按照存储容量和频宽的需求付费 ·可以将资料库从一个地方移到另一个地方(云的可移植性) ·可实现按需扩展 ·高可用性(HA) 将资料库部署到云可以通过简化可用信息通过Web网路连线的业务进程,支持和确保云中的业务应用程式作为软体即服务(SaaS)部署的一部分。另外,将企业资料库部署到云还可以实现存储整合。比如,一个有多个部门的大公司肯定也有多个资料库,可以把这些资料库在云环境中整合成一个资料库管理系统(DBMS)。 服务 云资料库是专业、高性能、高可靠的云资料库服务。云资料库不仅提供WEB界面进行配置、运算元据库实例,还提供可靠的数据备份和恢复、完备的安全管理、完善的监控、轻松扩展等功能支持。相对于用户自建资料库,云资料库具有更经济、更专业、更高效、更可靠、简单易用等特点,使您能更专注于核心业务。 优势 轻松部署 用户能够在RDS控制台轻松的完成资料库申请和创建,RDS实例在几分钟内就可以准备就绪并投入使用。用户通过RDS提供的功能完善的控制台,对所有实例进行统一管理。 高可靠 云资料库具有故障自动单点切换、资料库自动备份等功能,保证实例高可用和数据安全。免费提供7天数据备份,可恢复或回滚至7天内任意备份点。 低成本 RDS支付的费用远低于自建资料库所需的成本,用户可以根据自己的需求选择不同套餐,使用很低的价格得到一整套专业的资料库支持服务。 特性 实例创建快速 选择好需要的套餐后,RDS控制台会根据选择的套餐最佳化配置参数,短短几分钟一个可以使用的资料库实例就创建好了。 支持唯读实例 RDS唯读实例面向对资料库有大量读请求而非大量写请求的读写场景,通过为标准实例创建多个RDS唯读实例,赋予标准实例弹性的读能力扩展,从而增加用户的吞吐量。 故障自动切换 主库发生不可预知的故障(如:硬体故障)时,RDS将自动切换该实例下的主库实例,恢复时间一般5min。 数据备份 RDS默认自动开启备份,实现资料库实例的定时备份。自动备份保留期为七天。 在自动定时备份的基础上,RDS也支持用户手动的资料库实例备份(即数据快照),可以随时从数据快照恢复数据库实例。 Binlog 备份 RDS会自动备份Binlog日志,并长期保存Binlog日志的备份。 RDS备份的Binlog日志也提供用户下载,方便用户对Binlog进行二次分析处理。 访问白名单 RDS支持通过设定IP白名单的方式来控制RDS实例的访问许可权。 监控与讯息通知 通过RDS控制台可以详细了解资料库运行状态。并且可以通过控制台定制需要的监控策略,当监控项达到监控策略阀值时,RDS将通过简讯方式进行提醒和通知。 RDS服务的相关变更也会通过电子邮件或简讯通知功能及时告知。 套用场景 Web 网站 LAMP是常见的网站开发架构,有了RDS用户不用再为资料库的最佳化、管理劳神费力。RDS优异的性能为网站的发展壮大,提供强有力的保证。 数据分析

随着大数据时代的到来,RDS将成为用户在大数据时代把握时代数据脉搏、进行高效数据分析的得力助手。 数据管理

RDS做为云上的关系型资料库服务通过控制台进行简单、方便的数据管理,并通过高可靠的架构确保您的数据安全。 学习研究

RDS使用简单、容易上手,无论是用于资料库套用教学,还是做相关研究都是不错的选择。 主流云资料库—关系型资料库 阿里云关系型资料库 阿里云关系型资料库(Relational Database Service,简称RDS)是一种稳定可靠、可弹性伸缩的线上资料库服务。基于阿里云分散式档案系统和SSD糟高性能存储,RDS支持MySQL、SQL Server、PostgreSQL、PPAS(Postgre Plus Advanced Server,高度兼容Oracle资料库)和MariaDB TX引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决资料库运维的烦恼。 亚马逊Redshift Redshift跨一个主节点和多个工作节点实施分散式资料库。通过使用AW管理控制台,管理员能够在集群内增加或删除节点,以及 按实际需要调整资料库规模。所有的数据都存储在集群节点或机器实例中。 Redshift集群的实施可通过两种类型的虚拟机:密集存储型和密集计算型 。密集存储型虚拟机是专为大数据仓库套用而进行最佳化的,而密集计算型为计算密集型分析套用提供了更多的CPU。 亚马逊关系型资料库服务 亚马逊关系型资料库服务(RDS)是专为使用SQL资料库的事务处理套用而设计的。规模缩放和基本管理任务都可使用AWS管理控制台来实现自动化。AWS可以执行很多常见的资料库管理任务,例如备份。 主流云资料库—非关系型资料库(NOSQL) 云资料库MongoDB版 云资料库 MongoDB 版基于飞天分散式系统和高可靠存储引擎,采用高可用架构。提供容灾切换、故障迁移透明化、资料库线上扩容、备份回滚、性能最佳化等功能。 云资料库MongoDB支持灵活的部署架构,针对不同的业务场景提供不同的实例架构,包括单节点实例、副本集实例及分片集群实例。 亚马逊DynamoDB DynamoDB是亚马逊公司的NoSQL资料库产品。其资料库还可与亚马逊Lambda集成以帮助管理人员对数据和套用的触发器进行设定。 DynamoDB特别适用于具有大容量读写操作的移动套用。用户可创建存储JavaScript对象符号(JSON)文档的表格,而用户可指定键值对 其进行分区。与定义如何分割数据不同,这里无需定义一个正式的架构。

哪位高手可以推荐几款通用的数据库管理工具

1、MySQL Workbench

MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移

MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。该软件支持Windows和Linux系统,下面是一些该软件运行的界面截图:

2、数据库管理工具 Navicat Lite

NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。

界面如下图所示:

Navicat 提供商业版Navicat Premium 和免费的版本 Navicat Lite 。免费版本的功能已经足够强大了。

Navicat 支持的数据库包括MySQL、Oracle、SQLite、PostgreSQL和SQL Server 等。

3、开源ETL工具Kettle

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

·授权协议:LGPL

·开发语言: Java

·操作系统: 跨平台

4、Eclipse SQLExplorer

SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse连接到一个数据库。

SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,你能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。

SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择,下图是运行中的界面,很好很强大。

l授权协议: 未知

l开发语言: Java

l操作系统: 跨平台

5、MySQL管理工具phpMyAdmin

phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。

l授权协议:GPL

l开发语言:PHP

l操作系统:跨平台

6、Mongodb 管理工具Mongodb Studio

Mongodb是一款性能优良,功能丰富的文档型非关系型数据库。由于该数据库是开源项目并且还在不断更新中,目前为止在任何平台上都不能找到功能相对完整的客户端数据库管理工具。而越来越多的项目中使用了Mongodb,使得管理起来十分麻烦.如果点点鼠标就搞定了.那该有多好。

基于如上背景,我们制作了此MongoDB管理工具,在DBA/开发/管理员三个维度提供一定层次的管理功能。

Mongodb Management Studio功能如下:

l服务器管理功能

添加服务器,删除服务器

l服务器,数据库,表,列,索引,树形显示和状态信息查看

l查询分析器功能.

支持select,insert,Delete,update

支持自定义分页函 数 $rowid(1,5)查询第一条到第五条,需放在select后面.

l索引管理功能

支持列名的显示,索引的创建,查看,删除.

l数据库Profile管理.

可以设置Profile开关,查看Profile信息.自定义分页大小.

lmaster/slave信息显示

7、MySQL监控小工具mycheckpoint

mycheckpoint是一个开源的 MySQL监控工具,主要用来监控数据。通过视图方式提供监控数据报表。mycheckpoint支持以独立的Web服务器来运行。

例如:SELECTinnodb_read_hit_percent, DML FROM sv_report_chart_sample;

查看详细报表示例。

安装手册:

8、SQL SERVER 数据库发布向导

Microsoft SQL Server DatabasePublishing Wizard (微软SQLServer数据库发布向导) 是微软发布的一个开源工具,使用该工具可以帮你将SQLSERVER 数据库导出成一个 SQL脚本,类似 MySQL 的 mysqldump工具。

官方说明:SQLServer数据库发布向导提供了一种将数据库发布到 T-SQL 脚本或者直接发布到支持宿主服务提供程序的方法。

9、Eclipse 的Oracle插件jOra

jOra是一个为 Oracle开发者和管理员提供的 Eclipse 插件,可轻松的对Oracle进行开发和管理。

安装地址:

插件截图

l授权协议:免费,非开源

l开发语言:Java

l操作系统:跨平台

10、免费PostgreSQL监控工具pgwatch

pgwatch 是一个简单易用的PostgreSQL的监控工具,支持PostgreSQL 9.0 以及更新的版本。

主要特性:

- 配置简单

- 大量的监控图表

- 快速系统检查面板

- 自动收集统计信息

- 交互式的 Flash 图表

- 集成 SQL worksheet

l授权协议: Artistic

l开发语言:PHP

l操作系统: Linux

11、MySQL Browser

MySQL的客户端工具MySQL Browser的优点是简单,及其的简单,安装之后能够立刻上手,马上就能使用的那种,布局也很简陋,功能也很简陋,简单使用没有问题,尤其是刚开始学习mysql的同学,可以尝试一下。

·授权协议:未知

·操作系统: Windows

12、MySQL客户端软件HeidiSQL

HeidiSQL是一个功能非常强大的 MySQL 客户端软件,采用Delphi 开发,支持 Windows 操作系统。

l授权协议:GPL

l开发语言:Delphi/Pascal

l操作系统: Windows

13、SQLite管理工具SQLiteStudio

SQLiteStudio 是一个跨平台的 SQLite数据库的管理工具,采用 Tcl语言开发。

l授权协议:未知

l操作系统:跨平台

14、SQL客户端工具SQLyog

SQLyog 是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库。

功能:

l快速备份和恢复数据;

l以GRID/ TEXT格式显示结果;

l支持客户端挑选、过滤数据;

l批量执行很大的SQL脚本文件;

l快速执行多重查询并能够返回每页超过1000条的记录集,而这种操作是直接生成在内存中的;

l程序本身非常短小精悍!压缩后只有348 KB ;

l完全使用MySQLC APIs程序接口;

l以直观的表格界面建立或编辑数据表;

l以直观的表格界面编辑数据;

l进行索引管理;

l创建或删除数据库;

l操纵数据库的各种权限:库、表、字段;

l编辑BLOB类型的字段,支持Bitmap/GIF/JPEG格式;

l输出数据表结构/数据为SQL脚本;

l支持输入/输出数据为CSV文件;

l可以输出数据库清单为HTML文件;

l为所有操作建立日志;

l个人收藏管理操作语句;

l支持语法加亮显示;

l可以保存记录集为CSV、HTML、XML格式的文件;

l21、99% 的操作都可以通过快捷键完成;

l支持对数据表的各种高级属性修改;

l查看数据服务器的各种状态、参数等;

l支持更改数据表类型为ISAM, MYISAM, MERGE, HEAP, InnoDB, BDB;

l刷新数据服务器、日志、权限、表格等;

l诊断数据表:检查、压缩、修补、分析。

l授权协议:GPLv2

l开发语言:C/C++

l操作系统: Windows

15、数据挖掘工具RapidMiner

RapidMiner是世界领先的数据挖掘解决方案,在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛,包括各种数据艺术,能简化数据挖掘过程的设计和评价。

功能和特点

l免费提供数据挖掘技术和库;

l100%用Java代码(可运行在操作系统);

l数据挖掘过程简单,强大和直观;

l内部XML保证了标准化的格式来表示交换数据挖掘过程;

l可以用简单脚本语言自动进行大规模进程;

l多层次的数据视图,确保有效和透明的数据;

l图形用户界面的互动原型;

l命令行(批处理模式)自动大规模应用;

lJava API(应用编程接口);

l简单的插件和推广机制;

l强大的可视化引擎,许多尖端的高维数据的可视化建模;

l400多个数据挖掘运营商支持;

l耶鲁大学已成功地应用在许多不同的应用领域,包括文本挖掘,多媒体挖掘,功能设计,数据流挖掘,集成开发的方法和分布式数据挖掘。

l授权协议:未知

l开发语言:Java

l操作系统:跨平台

16、Oracle 数据库开发工具Oracle SQL Developer

Oracle SQL Developer 是一个免费非开源的用以开发数据库应用程序的图形化工具,使用SQLDeveloper 可以浏览数据库对象、运行 SQL 语句和脚本、编辑和调试 PL/SQL语句。另外还可以创建执行和保存报表。该工具可以连接任何 Oracle 9.2.0.1 或者以上版本的 Oracle 数据库,支持Windows、Linux 和 Mac OS X 系统。

·授权协议:免费,非开源

·开发语言:Java

·操作系统:Windows Linux MacOS

17、EMS SQL Manager for MySQL

EMS SQL Manager for MySQL是一款高性能MySQL数据库服务器系统的管理和开发工具。它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括:查看、存储规程和函数、InnoDB外部键字和其他特点。它提供了大量工具以满足富有经验的用户的所有要求。添加了精心设计的操作向导系统,以及SQL Manager for MySQL那富有艺术感的图形用户界面,即使新手也可以不会为如何使用而感到困扰。

l授权协议:商业软件

l开发语言:C/C++

l操作系统: Windows

18、数据库管理工具CoolSQL

CoolSQL是一个数据库客户端管理工具。

·支持大部分数据库包括:DB2、oracle、mysql、MS SQL Server、Derby、HSQL、Informix、Sybase、PostgresSQL等。

·为用户提供友好和漂亮UI,其整体框架由视图组成类似于Eclipse。支持直接修改SQL查询结果。

·支持将表格数据导出成文本文件,EXCEL和HTML。

·拥有一个支持SQL语法着色显示,智能提示,文本编辑和查找的SQL编辑器。

·能够展示数据库大部分元数据包括:版本,数据类型、函数,连接信息等。

·支持导出数据对象信息包括对象数据(INSERT SQL语句),生成创建/删除脚本(create script/drop script)。

·所有SQL脚本都可以以批量的模式执行。

·能够搜索所有数据包括数据库列,表/视图和其他表格型。

·支持i18n,当前提供两种语言(中文和英文)。

·提供收藏功能,管理由用户收集的文本信息。

·支持通过插件扩展其功能。

ll 授权协议:未知

l开发语言:Java

l操作系统:跨平台

19、SQLite Manager

这是一款方便firefox对任何SQLite数据库操作的扩展。使用这款扩展,可以在firefox下很容易的创建表格、建立索引、浏览搜索等操作。此外它还具有一个语法检查功能的下拉式菜单,从而保证用户的操作不会出错。

20、MySQL GUI Tools

这是MySQL官方专业的数据库管理工具,同时支持多种操作系统。该工具包括下面三个产品:

·MySQL Administrator 1.2

·MySQL Query Browser 1.2

·MySQL MigrationToolkit 1.1

21、SQL客户端管理工具SQuirreL SQL Client

SQuirreL SQL Client是一个SQL客户端管理工具。它允许你查看一个兼容JDBC的数据库的结构,浏览表格中的数据,运行SQL命令, 可连接的数据库有ORCAL,MS SQLSERVER, DB2 等, 它还允许用户安装和创建用于补充应用程序基本功能的插件。

功能和特点:

l柱状图显示对像;

l自动完成;

l语句提示;

l标记;

l自动纠正;

l编辑查询结果;

l关系图;

l分页打印。

l授权协议:未知

l语言:Java

l操作系统:跨平台

22、Tomcat管理工具EasyTomcat

EasyTomcat是一个用来帮助简化 Tomcat和 MySQL管理的系统,你可以启动、停止和配置Tomcat和MySQL服务器,同时也提供了监控的功能。

l授权协议:未知

l开发语言:Java

l操作系统:跨平台

23、SQL Server管理工具sqlBuddy

SqlBuddy是C#编写的一款用于Microsoft SQLServer和MSDE的开源工具,使用它可以很容易的编写SQL脚本。SqlBuddy提供的功能和查询分析器的目的有些微不同,它倾向于帮助使用者编写SQL。

l授权协议:未知

l开发语言:C#

l操作系统: Windows

24、数据库开发工具GSQL

GSQL 是 Gnome 下的一个集成数据库开发工具。数据库结构显示在下图左边的树状结构中,支持SQL的语法着色。

l授权协议:未知

l操作系统:Linux

25、SQLite数据库管理SQLiteSpy

sqlitespy是一个快速和紧凑的数据库SQLite的GUI管理软件 。它的图形用户界面使得它很容易探讨,分析和操纵sqlite3数据库。

l授权协议:未知

l开发语言:Delphi/Pascal

l操作系统:Windows

26、数据库开发工具Aqua Data Studio

Aqua DataStudio 是一个为数据库开发人员准备的集成开发环境,可以对数据库做查询、管理,提供大量的数据库工具,例如数据库比较、源码控制等,目前支持的数据库包括:Oracle, DB2iSeries, DB2 LUW, MS SQL Server, Sybase ASE, Sybase Anywhere, Sybase IQ, Informix,PostgreSQL, MySQL, Apache Derby, JDBC, and ODBC.

l授权协议:未知

l开发语言:C/C++

l操作系统:跨平台

27、MySQL 架构管理工具MySQL MMM

MySQL Master-Master 架构常被用在 SQLquery 相依性低的情况,像是 counter常使用的INSERT INTO ... ON DUPLICATEKEY UPDATE a = a + 1不会因为out-of-order而造成问题。而 MySQL MMM算是其中一套写得比较好的 MySQLMaster-Master架构管理工具。

l授权协议:未知

l开发语言:Python

l操作系统: Linux

28、MySQL Client

MySQL的客户端工具,主界面如下:

l授权协议:未知

l操作系统:Windows

云上MongoDB常见索引问题及最优索引规则大全

本文干货较多,建议收藏学习。先将文章结构速览奉上:

一、背景

二、MongoDB执行计划

2.1 queryPlanner信息

2.2 executionStats信息

2.3 allPlansExecution信息

三、云上用户建索引常见问题及优化方法

3.1 等值类查询常见问题及优化方法

3.1.1 同一类查询创建多个索引问题

3.1.2 多字段等值查询组合索引顺序非最优

3.1.3 最左原则包含关系引起的重复索引

3.1.4 唯一字段和其他字段组合引起的无用重复索引

3.2 非等值类查询常见问题及优化方法

3.2.1 非等值组合查询索引不合理创建

3.2.2 等值+非等值组合查询索引字段顺序不合理

3.2.3 不同类型非等值查询优先级问题

3.3 OR类查询常见问题及优化方法

3.3.1 普通OR类查询优化方法

3.3.2 复杂OR类查询优化方法

3.4 SORT类排序查询常见问题及优化方法

3.4.1 单字段正反序排序查询引起的重复索引

3.4.2 多字段排序查询正反序问题引起索引无效

3.4.3 等值查询+多字段排序组合查询

3.4.4 等值查询+非等值查询+SORT排序查询

3.4.5 OR+SORT组合排序查询

3.5 无用索引优化方法

四、MongoDB不同类型查询最优索引总结

腾讯云MongoDB当前已服务于 游戏 、电商、社交、教育、新闻资讯、金融、物联网、软件服务、 汽车 出行、音视频等多个行业。

腾讯MongoDB团队在配合用户分析问题过程中,发现 云上用户存在如下索引共性问题 ,主要集中在如下方面:

本文 重点分析总结腾讯云上用户索引创建不合理相关的问题 ,通过本文可以学习到MongoDB的以下知识点:

本文总结的 《最优索引规则创建大全》 不仅仅适用于MongoDB,很多规则 同样适用于MySQL等关系型数据库 。

判断索引选择及不同索引执行家伙信息可以通过explain操作获取, MongoDB通过explain来获取SQL执行过程信息 ,当前持续explain的请求命令包含以下几种:

aggregate, count, distinct, find, findAndModify, delete, mapReduce, and update。

详见explain官网链接:

explain可以携带以下几个参数信息,各参数信息功能如下:

2.1 queryPlanner信息

获取MongoDB查询优化器选择的最优索引和拒绝掉的非最优索引,并给出各个候选索引的执行阶段信息,queryPlanner输出信息如下:

queryPlanner输出主要包括如下信息:

parsedQuery信息

内核对查询条件进行序列化,生成一棵expression tree信息,便于候选索引查询匹配。

winningPlan信息

rejectedPlans信息

输出信息和winningPlan类似,记录这些拒绝掉索引的执行stage信息。

2.2 executionStats信息

explain的executionStats参数除了提供上面的queryPlanner信息外,还提供了最优索引的执行过程信息,如下:

上面是通过executionStats获取执行过程的详细信息,其中字段信息较多,平时分析索引问题最常用的几个字段如下:

executionStats输出字段较多,其他字段将在后续《MongoDB内核index索引模块实现原理》中进行进一步说明。

在实际分析索引问题是否最优的时候,主要查看以下三个统计项:

executionStats.totalKeysExamined

executionStats.totalDocsExamined

executionStats .nReturned

如果存在以下情况则说明索引存在问题,可能索引不是最优的:

1. executionStats.totalKeysExamine远大于executionStats .nReturned

2. executionStats. totalDocsExamined远大于executionStats .nReturned

2.3 allPlansExecution信息

allPlansExecution参数对应输出信息和executionStats输出信息类似,只是多了所有候选索引(包括reject拒绝的非最优索引)的执行过程,这里不再详述。

2.4 总结

从上面的几个explain执行计划参数输出信息可以看出,各个参数的功能各不相同,总结如下:

queryPlanner

输出索引的候选索引,包括最优索引及其执行stage过程(winningPlan)+其他非最优候选索引及其执行stage过程。

注意: queryPlanner没有真正在表中执行整个SQL,只做了查询优化器获取候选索引过程,因此可以很快返回。

executionStats

相比queryPlanner参数,executionStats会记录查询优化器根据所选最优索引执行SQL的整个过程信息,会真正执行整个SQL。

allPlansExecution

和executionStats类似,只是多了所有候选索引的执行过程。

在和用户一起优化腾讯云上MongoDB集群索引过程中,以及和头部用户的交流中发现很多用户对如何创建最优索引有较为严重的错误认识,并且很多是绝大部分用户的共性问题,因此在本文中将这些问题汇总如下:

3.1 等值类查询常见问题及优化方法

如下三个查询:

用户创建了如下3个索引:

{a:1, b:1, c:1}

{b:1, a:1, c:1}

{c:1, a:1, b:1}

实际上这3个查询属于同一类查询,只是查询字段顺序不一样,因此只需创建任一个索引即可满足要求。验证过程如下:

从上面的expalin输出可以看出,3个查询都走向了同一个索引。

例如test表有多条数据,每条数据有3个字段,分别为a、b、c。其中a字段有10种取值,b字段有100种取值,c字段有1000种取值,称为各个字段值的 “区分度” 。

用户查询条件为db.test.find({"a":"xxx", "b":"xxx", "c":"xxx"}),创建的索引为{a:1, b:1, c:1}。如果只是针对这个查询,该查询可以创建a,b,c三字段的任意组合,并且其SQL执行代价一样,通过hint强制走不通索引,验证过程如下:

从上面的执行计划可以看出,多字段等值查询各个字段的组合顺序对应执行计划代价一样。绝大部分用户在创建索引的时候,都是直接按照查询字段索引组合对应字段。

但是,单就这一个查询,这里有个不成文的建议,把区分度更高的字段放在组合索引左边,区分度低的字段放到右边。这样做有个好处,数据库组合索引遵从最左原则,就是当其他查询里面带有区分度最高的字段时,就可以快速排除掉更多不满足条件的数据。

例如用户有如下两个查询:

用户创建了如下两个索引:

{b:1, c:1}

{a:1,b:1,c:1}

这两个查询中,查询2中包含有查询1中的字段,因此可以用一个索引来满足这两个查询要求,按照最左原则,查询1字段放左边即可,该索引可以优化为:b,c字段索引+a字段索引,b,c字段顺序可以根据区分排序,加上c字段区分度比b高,则这两个查询可以合并为一个{c:1, b:1, a:1}。两个查询可以走同一个索引验证过程如下:

从上面输出可以看出,这两个查询都走了同一个索引。

例如用户有以下两个查询:

用户为这两个查询创建了两个索引,{a:1, b:1}和{a:1, c:1},但是a字段取值是唯一的,因此这两个查询中a以外的字段无用,一个{a:1}索引即可满足要求。

3.2 非 等值类查询常见索引错误创建方法及如何创建最优索引

假设用户有如下查询:

a,c两个字段都是非等值查询,很多用户直接添加了{a:1, c:1}索引,实际上多个字段的非等值查询,只有最左边的字段才能走索引,例如这里只会走a字段索引,验证过程如下:

从上面执行计划可以看出,索引数据扫描了10行(也就是a字段满足a:{$gte:1}条件的数据多少),但是实际上只返回了4条满足{a:{$gte:1}, c:{$lte:1}}条件的数据,可以看出c字段无法做索引。

同理,当查询中包含多个字段的范围查询的适合,除了最左边第一个字段可以走索引,其他字段都无法走索引。因此,上面例子中的查询候选索引为{a:1}或者{b:1}中任何一个就可以了,组合索引中字段太多会占用更多存储成本、同时占用更多IO资源引起写放大。

例如下面查询:

如上查询,d字段为非等值查询,e字段为等值查询,很多用户遇到该类查询直接创建了{d:1, e:1}索引,由于d字段为非等值查询,因此e字段无法走索引,验证过程如下:

从上面验证过程可以看出,等值类和非等值类组合查询对应组合索引,最优索引应该优先把等值查询放到左边,上面查询对应最优索引{e:1, d:1}

前面用到的非等值查询操作符只提到了比较类操作符,实际上非等值查询还有其他操作符。常用非等值查询包括:$gt、$gte、$lt、$lte、$in、$nin、$ne、$exists、$type等,这些非等值查询在绝大部分情况下存在如下优先级:

从上到下优先级更高,例如下面的查询:

如上,该查询等值部分查询最优索引{a:1, b:1}(假设a区分度比b高);非等值部分,因为$in操作符优先级最高,排他性更好,加上多个字段非等值查询只会有一个字段走索引,因此非等值部分最优索引为{g:1}。

最终该查询最优索引为:”等值部分最优索引”与”非等值部分最优索引”拼接,也就是{a:1,b:1, g:1}

3.3 OR类查询常见索引错误创建方法及如何创建最优索引

例如下面的OR查询:

该查询很多用户直接创建了{b:1, d:1, c:1, a:1},用户创建该索引后,发现用户还是全表扫描。

OR类查询需要给数组中每个查询添加索引,例如上面or数组中实际包含{ b: 0, d:0 }和 {"c":1, "a":{$gte:4}}查询,需要创建两个查询的最优索引,也就是{b:1, d:1}和{c:1, a:1},执行计划验证过程如下(该测试表总共10条数据):

从上面执行计划可以看出,如果该OR类查询走{b:1, d:1, c:1, a:1}索引,则实际上做了全表扫描。如果同时创建{b:1, d:1}、{c:1, a:1}索引,则直接走两个索引,其执行key和doc扫描行数远远小于全表扫描。

这里在提升一下OR查询难度,例如下面的查询:

上面的查询可以转换为如下两个查询:

如上图,查询1拆分后的两个查询2和查询3组成or关系,因此对应最优索引需要创建两个,分表是:{f:1, g:1, b:1, d:1} 和 {f:1, g:1, b:1, d:1}。对应执行计划如下:

同理,不管怎么增加难度,OR查询最终可转换为多个等值、非等值或者等值与非等值组合类查询,通过如上变换最终可以起到举一反三的作用。

说明:这个例子中可能在一些特殊数据分布场景,最优索引也可能是{f:1, g:1}或者{f:1, g:1, b:1, d:-1}或者{ f:1, g:1, c:1, a:1},这里我们只考虑大部分通用场景。

3.4 SORT类排序查询常见索引错误创建方法及如何创建最优索引

例如用户有以下两个查询:

这两个查询都不带条件,排序方式不一样,因此很多创建了两个索引{a:1}和{a:-1},实际上这两个索引中的任何一个都可以满足两种查询要求,验证过程如下:

假设有如下查询:

其中a字段为正序,b字段为反序排序,很多用户直接创建{a:1, b:1}索引,这时候b字段内容就存在内存排序情况。多字段排序索引,如果没有携带查询条件,则最优索引即为排序字段对应索引,这里切记保持每个字段得正反序和sort完全一致,否则可能存在部分字段内存排序的情况,执行计划验证过程如下:

例如如下查询:

该类查询很多人直接创建{a:1, b:1, c:1, d:1},结果造成内存排序。这种组合查询最优索引=“多字段等值查询最优索引_多字段排序类组合最优索引”,例如该查询:

{ "a" : 3, "b" : 1}等值查询假设a区分度比b高,则对应最优索引为:{a:1, b:1}

{ c:-1, d:1}排序类查询最优索引保持正反序一致,也就是:{ c:-1, d:1}

因此整个查询就是这两个查询对应最优索引拼接,也就是{a:1, b:1, c:-1, d:1},对应执行计划过程验证如下:

假设有下面的查询:

腾讯云很多用户看到该查询直接创建{a:1, b:1, c:1, d:-1, e:1}索引,发现存在内存排序。等值+非等值+sort排序组合查询,由于非等值查询右边的字段不能走索引,因此如果把d, e放到c的右边,则d,e字段索引无效。

等值+非等值+sort排序最优索引组合字段顺序为:等值_sort排序_非等值,因此上面查询最优索引为:{a:1, b:1, d:-1, e:1, c:1}。执行计划验证过程如下:

例如如下查询:

上面组合很多人直接创建{b:1, d:1, c:1, a:1, e:1},该索引创建后还是会扫表和内存排序,实际上OR+SORT组合查询可以转换为下面两个查询:

所以这个复杂查询就可以拆分为等值组合查询+sort排序查询,拆分为上面的两个查询,这样我们只需要同时创建查询2和查询3对应最优索引即可。该查询最终拆分后对应最优索引需要添加如下两个:

{b:1, d:1, e:-1}和{c:1, a:1, e:-1}

非最优索引和最优索引执行计划验证过程如下:

OR+SORT类查询,最终可以《参考前面的OR类查询常见索引错误创建方法》把OR查询转换为多个等值、非等值或者等值与非等值组合查询,然后与sort排序对应索引字段拼接。例如下面查询:

拆分后的两个查询组成or关系,如下:

如上,查询1 = or: [查询2, 查询3],因此只需要创建查询2和查询3两个最优索引即可满足查询1要求,查询2和查询3最优索引可以参考前面《or类查询常见索引错误创建方法》,该查询最终需要创建如下两个索引:

{f:1, g:1, b:1, d:1, e:-1}和{ f:1, g:1, c:1, a:1, e:-1}

说明:这个例子中可能在一些特殊数据分布场景,最优索引也可能是{f:1, g:1}或者{f:1, g:1, b:1, d:1, e:-1}或者{ f:1, g:1, c:1, a:1, e:-1},这里我们只考虑通用场景。

3.5 避免创建太多无用索引及无用索引分析方法

在腾讯云上,我们还发现另外一个问题,很多实例存在大量无用索引,无用索引会引起以下问题:

存储成本增加

没增加一个索引,MongoDB内核就会创建一个index索引文件,记录该表的索引数据,造成存储成本增加。

影响写性能

用户没写入一条数据,就会在对应索引生成一条索引KV,实现索引与数据的一一对应,索引KV数据写入Index索引文件过程加剧写入负载。

影响读性能

MongoDB内核查询优化器原理是通过候选索引快速定位到满足条件的数据,然后采样评分。如果满足条件的候选索引越多,整个评分过程就会越长,增加内核选择最优索引的流程。

下面以一个真实线上实例为例,说明如何找出无用索引:

MongoDB默认提供有索引统计命令来获取各个索引命中的次数,该命令如下:

该聚合输出中的几个核心指标信息如下表:

上表中的ops代表命中次数,如果命中次数为0或者很小,说明该索引很少被选为最优索引使用,因此可以认为是无用索引,可以考虑删除。

说明:

本文总结的《最优索引规则大全》中的规则适用于绝大部分查询场景,但是一些特殊数据分布场景可能会有一定偏差,请根据实际数据分布进行查询计划分析。

DBbrain for MongoDB

最后,本文中所介绍的优化原理即将集成到腾讯云DBbrain for MongoDB的智能索引推荐(规则+代价计算)功能中,届时可帮助用户一键优化索引,无需亲自反复推敲验证,欢迎体验。

腾讯云MongoDB当前服务于 游戏 、电商、社交、教育、新闻资讯、金融、物联网、软件服务等多个行业;MongoDB团队(简称CMongo)致力于对开源MongoDB内核进行深度研究及持续性优化(如百万库表、物理备份、免密、审计等),为用户提供高性能、低成本、高可用性的安全数据库存储服务。后续持续分享MongoDB在腾讯内部及外部的典型应用场景、踩坑案例、性能优化、内核模块化分析。

叮咚买菜自建MangoDB上腾讯云实践

数据库审计 支持审计数据库包括哪些?

安华金和数据库审计产品支持市面上30多种数据库类型,关系型数据库类型包含Oracle、MySQL、SQLServer、DB2、Postgres、Sybase、DM、Gbase8A、Kingbase、Informix、Oscar神通、CacheDB、Gbase8T、MariaDB、Percona、Greenplum、Teradata、Hana、SG-RDB_MySQL、SG-RDB_PostgreSQL

等等,非关系型数据库包含HBase、MongoDB、Hive、Impala、Sentry、Redis、HDFS、ElasticSearch、Spark SQL等等,去年做交流的时候聊过,还特意留了一张支持数据库的表格,现在是不是又有新的数据库也可以支持,你跟安华了解下,他们是业界支持数据库类型最多的一家厂商,还不明白自己百度下。

如何建立一个完整可用的安全大数据平台

要建立一个大数据系统,我们需要从数据流的源头跟踪到最后有价值的输出,并在现有的Hadoop和大数据生态圈内根据实际需求挑选并整合各部分合适的组件来构建一个能够支撑多种查询和分析功能的系统平台。这其中既包括了对数据存储的选择,也涵盖了数据线上和线下处理分离等方面的思考和权衡。此外,没有任何一个引入大数据解决方案的商业应用在生产环境上承担的起安全隐患。

1

计算框架篇

大数据的价值

只有在能指导人们做出有价值的决定时,数据才能体现其自身的价值。因此,大数据技术要服务于实际的用途,才是有意义的。一般来说,大数据可以从以下三个方面指导人们做出有价值的决定:

报表生成(比如根据用户历史点击行为的跟踪和综合分析、 应用程序活跃程度和用户粘性计算等);

诊断分析(例如分析为何用户粘性下降、根据日志分析系统为何性能下降、垃圾邮件以及病毒的特征检测等);

决策(例如个性化新闻阅读或歌曲推荐、预测增加哪些功能能增加用户粘性、帮助广告主进行广告精准投放、设定垃圾邮件和病毒拦截策略等)。

图 1

进一步来看,大数据技术从以下三个方面解决了传统技术难以达成的目标(如图1):

在历史数据上的低延迟(交互式)查询,目标是加快决策过程和时间, 例如分析一个站点为何变缓慢并尝试修复它;

在实时数据上的低延迟查询,目的是帮助用户和应用程序在实时数据上做出决策, 例如实时检测并阻拦病毒蠕虫(一个病毒蠕虫可以在1.3秒内攻击1百万台主机);

更加精细高级的数据处理算法,这可以帮助用户做出“更好”的决策, 例如图数据处理、异常点检测、趋势分析及其他机器学习算法。

蛋糕模式

从将数据转换成价值的角度来说,在Hadoop生态圈十年蓬勃成长的过程中,YARN和Spark这二者可以算得上是里程碑事件。Yarn的出现使得集群资源管理和数据处理流水线分离,大大革新并推动了大数据应用层面各种框架的发展(SQL on Hadoop框架, 流数据,图数据,机器学习)。

它使得用户不再受到MapReduce开发模式的约束,而是可以创建种类更为丰富的分布式应用程序,并让各类应用程序运行在统一的架构上,消除了为其他框架维护独有资源的开销。就好比一个多层蛋糕,下面两层是HDFS和Yarn, 而MapReduce就只是蛋糕上层的一根蜡烛而已,在蛋糕上还能插各式各样的蜡烛。

在这一架构体系中,总体数据处理分析作业分三块(图2),在HBase上做交互式查询(Apache Phoenix, Cloudera Impala等), 在历史数据集上编写MapReduce程序抑或利用Hive等做批处理业务, 另外对于实时流数据分析Apache Storm则会是一种标准选择方案。

虽然Yarn的出现极大地丰富了Hadoop生态圈的应用场景,但仍存有两个显而易见的挑战:一是在一个平台上需要维护三个开发堆栈;二是在不同框架内很难共享数据,比如很难在一个框架内对流数据做交互式查询。这也意味着我们需要一个更为统一和支持更好抽象的计算框架的出现。

图 2

一统江湖

Spark的出现使得批处理任务,交互式查询,实时流数据处理被整合到一个统一的框架内(图3),同时Spark和现有的开源生态系统也能够很好地兼容(Hadoop, HDFS, Yarn, Hive, Flume)。 通过启用内存分布数据集,优化迭代工作负载, 用户能够更简单地操作数据,并在此基础上开发更为精细的算法,如机器学习和图算法等。

有三个最主要的原因促使Spark目前成为了时下最火的大数据开源社区(拥有超过来自200多个公司的800多个contributors):

Spark可以扩展部署到超过8000节点并处理PB级别的数据,同时也提供了很多不错的工具供应用开发者进行管理和部署;

Spark提供了一个交互式shell供开发者可以用Scala或者Python即时性试验不同的功能;

Spark提供了很多内置函数使得开发者能够比较容易地写出低耦合的并且能够并发执行的代码,这样开发人员就更能集中精力地为用户提供更多的业务功能而不是花费时间在优化并行化代码之上。

当然Spark也和当年的MapReduce一样不是万灵药,比如对实时性要求很高的流数据处理上Apache Storm还是被作为主流选择, 因为Spark Streaming实际上是microbatch(将一个流数据按时间片切成batch,每个batch提交一个job)而不是事件触发实时系统,所以虽然支持者们认为microbatch在系统延时性上贡献并不多,但在生产环境中和Apache Storm相比还不是特别能满足对低延时要求很高的应用场景。

比如在实践过程中, 如果统计每条消息的平均处理时间,很容易达到毫秒级别,但一旦统计类似service assurance(确保某条消息在毫秒基本能被处理完成)的指标, 系统的瓶颈有时还是不能避免。

但同时我们不能不注意到,在许多用例当中,与流数据的交互以及和静态数据集的结合是很有必要的, 例如我们需要在静态数据集上进行分类器的模型计算,并在已有分类器模型的基础上,对实时进入系统的流数据进行交互计算来判定类别。

由于Spark的系统设计对各类工作(批处理、流处理以及交互式工作)进行了一个共有抽象,并且生态圈内延伸出了许多丰富的库(MLlib机器学习库、SQL语言API、GraphX), 使得用户可以在每一批流数据上进行灵活的Spark相关操作,在开发上提供了许多便利。

Spark的成熟使得Hadoop生态圈在短短一年之间发生了翻天覆地的变化, Cloudera和Hortonworks纷纷加入了Spark阵营,而Hadoop项目群中除了Yarn之外已经没有项目是必须的了(虽然Mesos已在一些场合替代了Yarn), 因为就连HDFS,Spark都可以不依赖。但很多时候我们仍然需要像Impala这样的依赖分布式文件系统的MPP解决方案并利用Hive管理文件到表的映射,因此Hadoop传统生态圈依然有很强的生命力。

另外在这里简要对比一下交互式分析任务中各类SQL on Hadoop框架,因为这也是我们在实际项目实施中经常遇到的问题。我们主要将注意力集中在Spark SQL, Impala和Hive on Tez上, 其中Spark SQL是三者之中历史最短的,论文发表在15年的SIGMOD会议上, 原文对比了数据仓库上不同类型的查询在Shark(Spark最早对SQL接口提供的支持)、Spark SQL和Impala上的性能比较。

也就是说, 虽然Spark SQL在Shark的基础上利用Catalyst optimizer在代码生成上做了很多优化,但总体性能还是比不上Impala, 尤其是当做join操作的时候, Impala可以利用“predicate pushdown”更早对表进行选择操作从而提高性能。

不过Spark SQL的Catalyst optimizer一直在持续优化中,相信未来会有更多更好的进展。Cloudera的Benchmark评测中Impala一直比其他SQL on Hadoop框架性能更加优越,但同时Hortonworks评测则指出虽然单个数据仓库查询Impala可以在很短的时间内完成,但是一旦并发多个查询Hive on Tez的优势就展示出来。另外Hive on Tez在SQL表达能力也要比Impala更强(主要是因为Impala的嵌套存储模型导致的), 因此根据不同的场景选取不同的解决方案是很有必要的。

图 3

各领风骚抑或代有才人出?

近一年比较吸引人眼球的Apache Flink(与Spark一样已有5年历史,前身已经是柏林理工大学一个研究性项目,被其拥趸推崇为继MapReduce, Yarn,Spark之后第四代大数据分析处理框架)。 与Spark相反,Flink是一个真正的实时流数据处理系统,它将批处理看作是流数据的特例,同Spark一样它也在尝试建立一个统一的平台运行批量,流数据,交互式作业以及机器学习,图算法等应用。

Flink有一些设计思路是明显区别于Spark的,一个典型的例子是内存管理,Flink从一开始就坚持自己精确的控制内存使用并且直接操作二进制数据,而Spark一直到1.5版本都还是试用java的内存管理来做数据缓存,这也导致了Spark很容易遭受OOM以及JVM GC带来的性能损失。

但是从另外一个角度来说, Spark中的RDD在运行时被存成java objects的设计模式也大大降低了用户编程设计门槛, 同时随着Tungsten项目的引入,Spark现在也逐渐转向自身的内存管理, 具体表现为Spark生态圈内从传统的围绕RDD(分布式java对象集合)为核心的开发逐渐转向以DataFrame(分布式行对象集合)为核心。

总的来说,这两个生态圈目前都在互相学习,Flink的设计基因更为超前一些,但Spark社区活跃度大很多,发展到目前毫无疑问是更为成熟的选择,比如对数据源的支持(HBase, Cassandra, Parquet, JSON, ORC)更为丰富以及更为统一简洁的计算表示。另一方面,Apache Flink作为一个由欧洲大陆发起的项目,目前已经拥有来自北美、欧洲以及亚洲的许多贡献者,这是否能够一改欧洲在开源世界中一贯的被动角色,我们将在未来拭目以待。

2

NoSQL数据库篇

NoSQL数据库在主流选择上依旧集中在MongoDB, HBase和Cassandra这三者之间。在所有的NoSQL选择中,用C 编写的MongoDB几乎应该是开发者最快也最易部署的选择。MongoDB是一个面向文档的数据库,每个文档/记录/数据(包括爬取的网页数据及其他大型对象如视频等)是以一种BSON(Binary JSON)的二进制数据格式存储, 这使得MongoDB并不需要事先定义任何模式, 也就是模式自由(可以把完全不同结构的记录放在同一个数据库里)。

MongoDB对于完全索引的支持在应用上是很方便的,同时也具备一般NoSQL分布式数据库中可扩展,支持复制和故障恢复等功能。 MongoDB一般应用于高度伸缩性的缓存及大尺寸的JSON数据存储业务中,但不能执行“JOIN”操作,而且数据占用空间也比较大,最被用户诟病的就是由于MongoDB提供的是数据库级锁粒度导致在一些情况下建索引操作会引发整个数据库阻塞。一般来说,MongoDB完全可以满足一些快速迭代的中小型项目的需求。

下面来主要谈谈Cassandra和HBase之间的比较选择。Cassandra和HBase有着截然不同的基因血统。HBase和其底层依赖的系统架构源自于著名的Google FileSystem(发表于2003年)和Google BigTable设计(发表于2006年), 其克服了HDFS注重吞吐量却牺牲I/O的缺点,提供了一个存储中间层使得用户或者应用程序可以随机读写数据。

具体来说,HBase的更新和删除操作实际上是先发生在内存MemStore中, 当MemStore满了以后会Flush到StoreFile, 之后当StoreFile文件数量增长到一定阈值后会触发Compact合并操作,因此HBase的更新操作其实是不断追加的操作,而最终所有更新和删除数据的持久化操作都是在之后Compact过程中进行的。

这使得应用程序在向内存MemStore写入数据后,所做的修改马上就能得到反映,用户读到的数据绝不会是陈旧的数据,保证了I/O高性能和数据完全一致性; 另一方面来说, HBase基于Hadoop生态系统的基因就已经决定了他自身的高度可扩展性、容错性。

在数据模型上,Cassandra和HBase类似实现了一个key-value提供面向列式存储服务,其系统设计参考了 Amazon Dynamo (发表于2007年) 分布式哈希(DHT)的P2P结构(实际上大部分Cassandra的初始工作都是由两位从Amazon的Dynamo组跳槽到Facebook的工程师完成),同样具有很高的可扩展性和容错性等特点。

除此之外, 相对HBase的主从结构,Cassandra去中心化的P2P结构能够更简单地部署和维护,比如增加一台机器只需告知Cassandra系统新节点在哪,剩下的交给系统完成就行了。同时,Cassandra对多数据中心的支持也更好,如果需要在多个数据中心进行数据迁移Cassandra会是一个更优的选择。

Eric Brewer教授提出的经典CAP理论认为任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。实际分布式系统的设计过程往往都是在一致性与可用性上进行取舍,相比于HBase数据完全一致性的系统设计,Cassandra选择了在优先考虑数据可用性的基础上让用户自己根据应用程序需求决定系统一致性级别。

比如:用户可以配置QUONUM参数来决定系统需要几个节点返回数据才能向客户端做出响应,ONE指只要有一个节点返回数据就可以对客户端做出响应,ALL指等于数据复制份数的所有节点都返回结果才能向客户端做出响应,对于数据一致性要求不是特别高的可以选择ONE,它是最快的一种方式。

从基因和发展历史上来说,HBase更适合用做数据仓库和大规模数据处理与分析(比如对网页数据建立索引), 而Cassandra则更适合用作实时事务和交互式查询服务。Cassandra在国外市场占有比例和发展要远比国内红火, 在不少权威测评网站上排名都已经超过了HBase。目前Apache Cassandra的商业化版本主要由软件公司DataStax进行开发和销售推广。另外还有一些NoSQL分布式数据库如Riak, CouchDB也都在各自支持的厂商推动下取得了不错的发展。

虽然我们也考虑到了HBase在实际应用中的不便之处比如对二级索引的支持程度不够(只支持通过单个行键访问,通过行键的范围查询,全表扫描),不过在明略的大数据基础平台上,目前整合的是依然是HBase。

理由也很简单,HBase出身就与Hadoop的生态系统紧密集成,其能够很容易与其他SQL on Hadoop框架(Cloudera Impala, Apache Phoenix, or Hive on Tez)进行整合,而不需要重新部署一套分布式数据库系统,而且可以很方便地将同样的数据内容在同一个生态系统中根据不同框架需要来变换存储格式(比如存储成Hive表或者Parquet格式)。

我们在很多项目中都有需要用到多种SQL on Hadoop框架,来应对不同应用场景的情况,也体会到了在同一生态系统下部署多种框架的简便性。 但同时我们也遇到了一些问题, 因为HBase项目本身与HDFS和Zookeeper系统分别是由不同开源团队进行维护的,所以在系统整合时我们需要先对HBase所依赖的其他模块进行设置再对HBase进行配置,在一定程度上降低了系统维护的友好性。

目前我们也已经在考虑将Cassandra应用到一些新的客户项目中,因为很多企业级的应用都需要将线上线下数据库进行分离,HBase更适合存储离线处理的结果和数据仓库,而更适合用作实时事务和并发交互性能更好的Cassandra作为线上服务数据库会是一种很好的选择。

3

大数据安全篇

随着越来越多各式各样的数据被存储在大数据系统中,任何对企业级数据的破坏都是灾难性的,从侵犯隐私到监管违规,甚至会造成公司品牌的破坏并最终影响到股东收益。给大数据系统提供全面且有效的安全解决方案的需求已经十分迫切:

大数据系统存储着许多重要且敏感的数据,这些数据是企业长久以来的财富

与大数据系统互动的外部系统是动态变化的,这会给系统引入新的安全隐患

在一个企业的内部,不同Business Units会用不同的方式与大数据系统进行交互,比如线上的系统会实时给集群推送数据、数据科学家团队则需要分析存储在数据仓库内的历史数据、运维团队则会需要对大数据系统拥有管理权限。

因此为了保护公司业务、客户、财务和名誉免于被侵害,大数据系统运维团队必须将系统安全高度提高到和其他遗留系统一样的级别。同时大数据系统并不意味着引入大的安全隐患,通过精细完整的设计,仍然能够把一些传统的系统安全解决方案对接到最新的大数据集群系统中。

一般来说,一个完整的企业级安全框架包括五个部分:

Administration: 大数据集群系统的集中式管理,设定全局一致的安全策略

Authentication: 对用户和系统的认证

Authorization:授权个人用户和组对数据的访问权限

Audit:维护数据访问的日志记录

Data Protection:数据脱敏和加密以达到保护数据的目的

系统管理员要能够提供覆盖以上五个部分的企业级安全基础设施,否则任何一环的缺失都可能给整个系统引入安全性风险。

在大数据系统安全集中式管理平台这块,由Hortonworks推出的开源项目Apache Ranger就可以十分全面地为用户提供Hadoop生态圈的集中安全策略的管理,并解决授权(Authorization)和审计(Audit)。例如,运维管理员可以轻松地为个人用户和组对文件、数据等的访问策略,然后审计对数据源的访问。

与Ranger提供相似功能的还有Cloudera推出的Apache Sentry项目,相比较而言Ranger的功能会更全面一些。

而在认证(Authentication)方面, 一种普遍采用的解决方案是将基于Kerberos的认证方案对接到企业内部的LDAP环境中, Kerberos也是唯一为Hadoop全面实施的验证技术。

另外值得一提的是Apache Knox Gateway项目,与Ranger提高集群内部组件以及用户互相访问的安全不同,Knox提供的是Hadoop集群与外界的唯一交互接口,也就是说所有与集群交互的REST API都通过Knox处理。这样,Knox就给大数据系统提供了一个很好的基于边缘的安全(perimeter-based security)。

基于以上提到的五个安全指标和Hadoop生态圈安全相关的开源项目, 已经足已证明基于Hadoop的大数据平台我们是能够构建一个集中、一致、全面且有效的安全解决方案。

我市再ITjob管网上面找的

2019-02-05:金融风控系统设计 - 外汇管理风控系统

无际致力于金融科技对银行、融担、互联网金融行业的基于供应链金融为核心的互联网化金融风控技术的输出。涵盖了互联网信贷核心的系统建设,基于Spark[Spark ML, Spark Streaming(Flink 替换中),Spark Graphx]技术体系的信贷风控系统建设,以及长期为合作伙伴提供有效的低风险资产的流量业务。在经历了从银行到互联网金融公司到科技输出行金融科技公司的历程后,笔者希望能够将对行业及系统设计的理解做以分享。

本文共分为三部分(外资银行的外汇交易系统风险建设,互联网金融个人风控系统建设,供应链金融中小企业风控系统建设)

该部分更多介绍一下外汇交易系统风险控制的业务层面,技术上的确无创新之处,加上大量使用三方厂商的系统,在此感谢IBM MQ、Webmethod跟Oracle为该行提供大量的便利,在这家银行里,我们看不到Tomcat, Jetty, 看不到Spring Cloud,Dubbo,ZooKeeper,没有人理会微服务,大家连Yarn跟Hadoop啥关系都不知道。从技术角度到也单纯,能买的就不做。特别是竟然拿着ITIL去指导DevOps,搞个Jenkins就叫做CI, CD了(我都没见到过一个正经能跑的自动化Test Case),系统跑批几乎都是各种存储过程(不得不说,银行的确交易信息多流水大,加上以前对数据平台的构建不完善,国内银行很多也是如此,这些批处理无非就是业务型的处理统计、补账、代收付、息费计算、清结算等等的工作,围绕着银行的核心业务:存贷款、资金资产管理、理财及卡业务、中间业务来完成不论日终还是日间),这里的JVM调优靠的是买硬件(似乎印证了笔者17年前工作的一家公司的老总说过,别看咱软件做的不行,咱有钱,硬件补...贼豪)另外,最不习惯的就是在用SVN,不知道Git为何物,再小的小工具,也不会去尝试JHipster。笔者曾做过一个基于Nodejs的小工具,被别的组的人嘲笑半天,说js还能做生产环境的工具.....但是做Quants的人在用Haskell包个计算引擎,也做了一些DSL的实践,有机会把我了解到的再跟大家分享。在这里的三年半时间,让我学会了扯皮,更加体会到不做不错的道理。

2012年底有机会进入一家非常有名的外资银行从事系统建设工作,当时主要的工作是完成Murex2000到Murex3.1的升级项目,该项目很大,大到项目的需求及前期讨论花了1年多的时间,最终产物除了各级海外高层领导的审批之外,建立了TOM文档。(TOM: Target Of Model)也就是这个项目最终要达成的目的,对现有业务的影响,对现有系统的改造。说实话,这个项目也让我见识了为啥外资行的系统如此庞大,如此复杂,当然除了必须符合KYC,GAAC,Anti-Laundry 及银行的监管特性外,以互联网化视角看到的很多系统都冗余的不行,加上极大的人员浪费(一个项目2Program Manager,4-5个Project Manager,一大堆BA,当然还有一帮没啥用的Technical BA - 没人知道为啥弄这么个职位,他们的确不是架构师,最多懂一些系统的配置和流程的改动及垂直领域业务;真正干活的几本都是国人;的确不懂为啥,动不动就弄一大帮人跑到新加坡出差,上线都跑到伦敦去上 - 这个倒是有点道理,毕竟很多Trader在英国)。整个系统建设初步估算4-5年,当然包含了系统迁移,数据迁移,各种UAT, UVT, Rollout等。回到项目本身,Murex可以说是外汇交易管理系统Vendor中的绝对老大,公司名气大,系统大,订单金额大,Consultant的架子大。做过资金、外汇交易管理的人都知道Summit/Murex/Calypso 三家公司,说实话,如果从技术角度选个合适的中台,我会选Calypso(可能因为对Java框架情有独钟);如果选大而全的,不论从支持的产品角度(能想到的Option的,Vanilla的,衍生品,押品,Fx的各种),还是从功能角度:能MSL(Murex Script Language),各种Pre-Trade,Post-Trade的Setup,定价,Curve PnL,又能出策略,算各种VaR,又能录交易看Cash, PV, NPV还能跟后台操作不管Paper Confirmation, Electronic Confirmation(Swift)还是各种结算,审计, 财务,对账等等我只会选Murex,虽然贵。

由于当时更多的接触的是基于外汇系统的风险系统建设工作,简单说说外汇交易系统的风险管理,笔者接触过的银行有一点是一样的,就都是风险厌恶型实体,基本上对风险容忍度都不高。从风险的角度,银行无非关注:

a). Liquidity Risk【可能因为笔者参与很多ALM的项目建设,对银行的表跟流动性关注颇多,才把流动性风险放在首位】就这么一句话,靠控制存量,调节流量,尽量保持负债的稳定性和资产的高流动性来应对Liquidity Risk。笔者曾经在某Top 10互金P2P公司任职技术管理,顺便提一句,P2P在完全取消资金池及错配后,流动性成为是否能活下去的关键,当然如果你在资本市场上有极强的融资能力另议,但融资如果融来的是运营资金,那就只能再找通道洗成兑付资金喽。

关于错配所谓的借端放长,因为你的负债大量的都是短期的定期存款或者活期存款,但你的资产,很多是来自于中长期的贷款,的债券投资等等,这些都是表内业务,而且还有大量的表外业务,比如说担保、承诺、银行承兑汇票、理财产品,这都会对流动性产生影响。外汇交易也是一样,根源是到底有没有钱。

b). Credit Risk:交易对手风险或履约风险,指交易对方不履行到期债务的风险。由于结算方式的不同,场内衍生交易和场外衍生交易各自所涉的信用风险也有所不同。

c). Operation Risk:操作型风险,这个最好理解,为啥Murex提供了OSP

d). Market Risk:没有比这个链接讲的更好的了  市场风险  ,汇率风险,利率风险,大宗商品等等都涵盖了。说到Market Risk,我们说一下VaR (Value At Risk)我真不知道咋翻译,这里面在系统设计时的确考虑大量运算,Historical 方法,蒙特卡洛法等等,都是需要对PnL, PPL等进行大量的计算才能完成的,说实话,Map-Reduce的思路可以做些改进,我也尝试过把10几年的数据Load到MongoDB里,然后用它自带的Map-Reduce函数做了实验,由于毕竟单线程的JS函数,效率提升很小。

而针对外汇的交易风险,来源几本就三方面:

1)经济主体自身持有外汇头寸,发生不同货币间进行兑换或折算产生的

2)汇率的不确定因素

3)并因汇率变动而给经济主体带来的经济损失的可能性【仔细想想,就是因为货币和时间两个维度的因素导致了风险的存在】而变数在于,各个国家汇率制度不同(金本位或固定汇率下,波动小;浮动汇率下加上波动率上下限不一,容易大起大落)、货币政策(基本起决定性作用,汇率的波动在购买力和利率平价理论下,汇率由两国的通胀率和利率决定的)、会计制度(科目划分、会计方法选择、会计核算差异,什么货币/非货币法什么流动/非流动法,还有时间度量法啥的)说到会计制度突然想起来下图,呵呵一下。当然还有国际收支,国家政局状况等。

考虑的风险因素基本上的就这些,作为整体的外汇交易系统的设计,主要的就是算,比如上面提到的VaR的计算,算成一个如下图的结果

整体系统的架构设计,不难在功能,银行里面懂业务的专家有的是,特别是这种外资银行,设计系统的时候最复杂的外部的业务对接,这也是为什么文章开端也提到很多互联网化的技术并没有用,除了风险的角度外,的确系统的外部对接是个问题,当然,为了更好的让系统能和外部业务系统对接,当时也有一个专门做协议转化的项目,双方大量使用XML定义好自己的格式用于交换数据,特别是跟MxML的转换工作。这也是开篇感谢IBM的原因。最后,给个整体的功能图,方便大家理解外汇交易系统到底啥样,

从业务功能上讲,无非前中后台,之所以说Murex是外汇交易管理平台,也是因为他们不做直接的交易系统,一般来说交易系统都是外采或自己开发的,毕竟没这么复杂。特别是如果外汇实盘交易,针对的产品大都是Fx Spot, Fx Forward, Fx Swap(不算衍生品的话),虚盘交易无非加入保证金的管理。实际上的

前台 管理功能无非:交易录入、实时行情、头寸、损益、交易前分析、策略试算、情景分析、模拟、客户管理、外部远程交易管理等;

中台 :信用管理,市场限额(敞口、止损位控制、VaR、期限限额、合规管控)、各种计算(VaR,资本充足状况、压力测试、Back Testing);

后台 :工作流配置,各种日常任务管控,报表,报文管理,抵押品,会计管理(交易头寸估值、外汇头寸的计算、报表、必须支持多实体,多币种,全资产多套会计体系的计算)。

系统所有功能都来自对业务的支持,十几年前我的导师, Des Greer  就跟我说过,银行的系统多,各司其职,看上去复杂,复杂在Data Model和系统所属的业务线上,本身并不复杂,设计工业化软件还是高内聚低耦合以最小的成本完成最基础的功能,不要按照自己的想法增加功能。当然也许说的不全对,但有一定道理。大年初一,啰哩啰嗦写了这么多,读的人希望不太晦涩。下面的两个部分,争取少些业务内容,多写一些跟技术相关的东东,毕竟我是个程序员。

祝大家新春快乐 - Leon 2019-2-5

Mongodb审计】的内容来源于互联网,如引用不当,请联系我们修改。

赞(0)
文章名称:《Mongodb审计(mongodb审计日志)》
文章链接:https://www.fzvps.com/131391.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!