Month: October 2015

  • MongoDB NOSQL数据库连载 第11回 MongoDB的备份

      本文永久链接地址:https://www.askmac.cn/archives/mongodb-backup.html   第11回  MongoDB的备份 在本连载中,至此我们一直注目MongoDB的功能方面的内容,这次开始我们将分几回介绍MongoDB的非功能方面的内容。这次我们将说明非功能特点中不可或缺的备份功能。另外,我们将使用MongoDB的最新版本v2.4。     关于命令标记 $ : 用命令行来实行的命令 > : 用mongo shell执行的命令 MongoDB的备份的概要   要对MongoDB进行备份,需要对数据进行备份以及对配置选项进行备份。   配置选项用mongod的启动命令或者配置文件来进行指定。无论那种情况,因为只要复制mongod启动shell以及配置文件等文件就可以进行备份了,所以在这次的文章中将省略说明。   在数据的备份之中,可以将全备份与部分备份来进行组合使用,但在MongoDB v2.4中没有提供增量备份的功能。因此,这次我们介绍全量备份以及restore的方法。 [参考] 增量备份是为了恢复因为人为错误损害的数据而被实现的功能,其功能目的对应MongoDB的延迟复制功能。关于延迟复制功能,请参考官方网站。     要用MongoDB进行全量备份时,有以下两种方法。 复制数据文件的方法 利用mongodump

  • 第10回 MongoDB中的聚集aggregation 处理

    本文永久链接地址:https://www.askmac.cn/archives/mongodb-aggregation.html 第10回  MongoDB中的aggregation 聚集处理 MongoDB中的aggregation 聚集处理的概要   一般而言,在NoSQL的程序中,没有RDB的SQL这种Group以及Sum函数等聚集功能。要执行聚集的话,需要在应用上独立地写代码。 但是,MongoDB的开发方针是是一边维持NoSQL的性能,一边实装类似于RDB的功能,关于聚集功能早就实装了。在MongoDB中执行聚集处理的方法有三种。 Aggregation Framework   SQL中提供Group By语句以及Sum函数。可以从Mongo Shell中与查询一样实施。一部分的处理($group与$sort)就对应sharding,用各shard进行处理。   MongoDB的Map/Reduce功能   独立定义Map函数/Reduce函数,执行聚集处理。在Aggregation Framework中无法做到的复杂的聚集处理,使用这种方法。因为对应sharding,所以可以执行分散处理。   与其他聚集处理软件/框架的合作 为了执行大规模的聚集处理,也可以与其他聚集处理软件/框架合作。在这次的文章中,我将介绍与Hadoop的合作。   那么马上让我们来使用Aggregation Framework,来试着实际操作处理吧。

  • 第7回 GridFS——在MongoDB中保存大容量文件的方法

    翻译自 : http://gihyo.jp/dev/serial/01/mongodb/0007   本文永久链接地址:https://www.askmac.cn/archives/mongodb-gridfs.html ‎   GridFS的概要   能在MongoDB中保存的Document尺寸一般有最大16Mbyte的限制。这对于保存一般的文本文件是非常足够的尺寸,但要保存一些巨大的文本文件以及视频等Binary data时,就会出现超出16Mbyte的情况。想在MongoDB中保存16Mbyte以上的文件时,通过使用GridFS这种接口,可以将数据进行多个分割来进行保存。这次,我将解说处理MongoDB中处理大尺寸文件的功能——GridFS。   GridFS的概要图       图:左青:大文件 左蓝:girdFS interface(mongofile或者是driver) 黄:1.将文件分割到chunk中,写入文件。 2.文件的元数据(文件名、尺寸等等)的写入 上图例:文件 collection 右Mongod以下:chunk用collection、Binary data、Binary data、Binary data、元数据用collection、元数据。   被分割的数据我们称之为chunk,作为Binary data保存在Document中。   用数据库来管理文件的优点   话说回来,用数据库管理文件有怎样的好处呢。   在大部分系统之中,图片/音频/视频等大尺寸Binary data使用OS的文件系统进行保存。使用文件系统的话,就能用用习惯的接口访问文件。但是根据情况不同,文件被保存在数据库中,管理起来就会更有效率。以下我试着整理了用数据库来管理文件的优点。  元数据管理简便   不仅是文件,也能通过数据库对文件相关的元数据进行同时管理。比如,文件的尺寸与制成者,制成时间等。视频文件的话也可以管理播放次数。在数据库中与文件相关的元数据也非常简便,有扩张性。另外,包含元数据的备份也很容易。

  • 第5回 试试MongoDB的Sharding

    翻译自: http://gihyo.jp/dev/serial/01/mongodb/0005 第5回 试试MongoDB的Sharding   前言   这次我将说明MongoDB的sharding。   Sharding是指将数据分散到多个服务器中的功能。这次我将先说明sharding,之后是sharding的概要,之后将解说在sharding中登场的几个关键词。第二章之后将解说sharding的架构顺序。   Sharding在MongoDB功能之中是很重要而复杂的。用手边的环境来架构的话,对sharding的理解有很大帮助,请一定好好参考本文再进行架构。   sharding的优点   Sharding通过将MongoDB进行水平Scaling的功能,有以下优点。   因为分散负荷所以可以提高性能   通过将数据分散到多个服务器中,可以减少CPU以及I/O的负荷。虽然是复述,但MongoDB可以用key的范围数据。通过设定合适的范围,可以将负荷进行水平Scaling。   由于资源分散导致性价比的提高。   近年因为内存以及磁盘的价格变得非常便宜了,尺寸越大内存模块价格越高,另外价格的上升幅度也会增多。要举内存的例子的话,共计需要64GB的内存时,比起与16个4GB内存Module的价格,4个16GModule的价格一般而言会更贵。内存以及磁盘在一个服务器中能够累计的Unit数是有极限的。在这样的背景下,在多个服务器中,使得数据分散,可以使得性价比提高。在MongoDB因为内存与性能直接相关,我推荐要保证有充足尺寸的内存。   MongoDB的sharding的概要   关于sharding,我将说明数据分散以及自动Balancing这两个特征。     根据Shard key的范围的数据分散   MongoDB的sharding采用范围分区(※1)。通过指定Shard key,可以决定个服务器中存储的数据的范围。服务器间不拥有重复数据,一个数据被存储的数据库是根据Shard key的范围来决定。 用图表示Sharding的image的话,就如图1所示。在图一中出现的术语我稍后说明。首先请随我对全体内容有个大致印象。 图1 sharding的概要图 图:右图例:mongos服务器 Shard Chunk 数据   ※1)   仅仅观察数据分散这个点的话,几乎与MySQL的范围指定的分区几乎相同。    自动balancing   Key范围的调整以及伴随调整的服务器间的数据的移动,MongoDB有将其全部自动进行balancing的功能。被设计不去在意由于自动balancing导致的服务器间的数据的偏差也行的形式。另外追加新的服务器时,自动调整会使得执行数据移动的偏差渐渐消失。 ※2) 在设定中可关闭自动balancing   重要关键词的说明   现在我将说明在sharding中出现的关键词。…

  • 用Hadoop的各种语言来进行wordcount(3):Apache Crunch

      本文永久链接:https://www.askmac.cn/archives/hadoop-wordcount-3.html       用Hadoop的各种语言来进行wordcount(3):Apache Crunch 这是Wordcount的最后一篇讲座了。今天用crunch在MapReduce与Spark两方面进行wordcount。   Crunch (MapReduce) Apache Crunch是apache project的OSS,所以这是将Google的Java Flume作为基础的。通过使用crunch,可以简单地记述mapreduce(现在是spark)的pipeline(现在是spark的program)的库。(即可以简单做到Apache Crunch:MapReduce 模块的java 库) Crunch是由Cloudera的首席数据科学家,Josh Will开发、维护的。国外的数据科学家都是自己开发必要的工具呢。(Cloudera Oryx、Impyla、其他)。真是太厉害了。   crunch的参考链接 http://crunch.apache.org/getting-started.html WordCount的代码参考crunch的页面,可以下载演示用代码来执行。 git clone http://github.com/jwills/crunch-demo

  • 用Hadoop的各种语言进行wordcount(2):Apache Spark

    本文永久链接地址:https://www.askmac.cn/archives/spark-wordcount-2.html ‎   继续昨天的内容,今天也是进行wordcount。今天是用Apache Spark (Scala、Python、Java)来执行wordcount。 Spark是用Scala、Python、Java来进行wordcount。Scala与Python是用REPL,Java是用Spark应用来执行。 Spark中的wordcount是在spark站点张有的样本,我参考了Cloudera的博客。 https://spark.apache.org/examples.html http://blog.cloudera.com/blog/2014/04/how-to-run-a-simple-apache-spark-app-in-cdh-5/ github 上的位置 https://github.com/kawamon/wordcount.git   Spark (Scala)   首先从Scala开始。   Cloudera Quickstart VM的Spark有版本问题,在spark-shell启动时会出现版本错误。 参考信息:http://community.cloudera.com/t5/Advanced-Analytics-Apache-Spark/5-1-Quickstart-VM-issue/td-p/16684 这次我们就无视安全性,来进行以下变更。   $ sudo -u hdfs hdfs dfs -chmod -R 777 /user/spark     另外,终止Quickstart VM进行启动的情况下,会有不能顺利与Spark Maste连接的情况。这时请试着重启Master与Worker(与History Server)     代码   val file = sc.textFile(“hdfs://quickstart.cloudera/user/cloudera/input”) val counts = file.flatMap(line => line.split(” “)).map(word =>…

  • 用Hadoop的各种语言进行wordcount(1)

    本文永久链接:https://www.askmac.cn/archives/hadoop-wordcount-1.html     用Hadoop的各种语言进行wordcount(1)   我稍微去调查了下Apache Crunch,顺便就在Hadoop中试着用各种语言来执行wordcount。首先是用MapReduce, HadoopStreaming、Hive、Pig执行了wordcount。 (追记):在github中放code:https://github.com/kawamon/wordcount.git     Wordcount的闲话   Wordcount经常在Hadoop的MapReduce的最开始的说明中使用,也有Hello World这样的意思。   Hadoop的MapReduce中,Wordcount作为样本拿来讲解的理由实在有点暧昧,大家肯定想问,为什么要拿wordcount来做样本呢。   现在处理所谓的量很多的大数据时,有两个问题。 为了将存储中保存的大量数据能用CPU来读入处理,移动数据是非常费时间的 用1台机器来执行耗费的时间太长(量大到内存上无法搭载,或者1台的CPU无法处理) 那么让我们试着使用之前安装的Cloudera Quickstart VM来执行吧。   准备 首先在HDFS中复制测试用的数据。这次使用的是crunch的样本,使用的是两个单纯的文件(file01, file02)(这是为了更容易比较结果)。   $ hadoop fs -cat input/file01 Hello World Bye World $ hadoop fs -cat input/file02 Hello Hadoop Goodbye Hadoop       MapReduce (Java)     首先是MapReduce (Java)。New…

  • 不建议把Oracle redo存放在SSD上

    不建议把Oracle redo存放在SSD上 不建议把redo存放在SSD上,主要原因在于 SSD的优势为读取速度,其对 随机写也有一定优化,但 redo日志的IO类型主要为顺序写而非随机写。   oracle 官方Support文档 《How to Minimize Waits for ‘Log File Sync’ (Doc ID 857576.1)》指出不建议把redo 存放在RAID 5或者 Solid State Disk (SSD)上。   以下是REDO存放在SAS和SSD上的性能对比图(越短越好),可以看到当并发较高时SSD甚至比普通SAS要差: 一般建议用户考虑将以下几类文件存放在SSD上:   读写最多的表空间的数据文件,包括Undo 临时表空间

  • 【MySQL学生手册】mysqlshow程序

    本文地址:https://www.askmac.cn/archives/mysqlshow-cmd.html   mysqlshow客户端程序可用于生成你的数据库和表的结构信息。它提供了类似show语句显示数据库,数据库下的表,或列信息,索引信息等功能的命令行接口。mysqlshow命令有以下语法: mysqlshow [options] [db_name [table_name [column_name]]] mysqlshow命令中的options部分包括有一些标准的连接命令项,如 –host,–user等。如果默认使用的连接参数不适合的话,你就需要主动提供这些项的设置。mysqlshow也提供了一些特定操作所使用的项。我们可以调用mysqlshow的 –help项来查看此客户端程序可使用的全部项。 mysqlshow所执行的操作结果取决于你提供的那些非命令项参数: 如果无参数提供,mysqlshow显示的是show databases类似的结果: 使用单个参数,mysqlshow会将其作为数据库名,执行效果类似于对此数据库执行show tables语句:

  • 【MySQL学生手册】SHOW和DESCRIBE命令使用

    本文地址:https://www.askmac.cn/archives/mysql-show-describe-cmd.html     尽管information_schema库中表的内容通常可使用select语句来进行访问,不过你还可以在其它数据库一样使用show和describe语句。   6.3.1 SHOW语句 MySQL支持许多show语句的使用,而没一种show语句返回一类元数据。在这一节中会介绍其中的一部分: show databases show tables show [full] columns show index show character set show collation   show databases列出了可用的所有数据库: show tables列出了在当前数据库下所有的表: