帖子标记 ‘Database’

数据备份非常重要,无论是为了避免系统发生故障造成损失,还是平日对重要数据进行管理。当然你可以选择使用第二个硬盘对数据进行备份管理,问题是如 果可以不花钱就能做到这一点,何乐而不为?此外,你也很难保证你的第二块硬盘不不会发生故障吧。因此,选择一些有保证的在线存储备份服务是非常不错的主 意。

online storage

在线存储工具非常之多,在去年年底我为大家总结了“2010年最佳国外免费在线存储服务”。现在再为大家介绍5款优秀的免费在线数据备份存储工具:

Windows Live SkyDrive

Windows Live Sky Drive
Windows Live Skydrive是非常流行的基于云计算的服务,提供25GB的免费存储空间。SkyDrive的使用非常简单,首先使用你的Live ID登录为Windows Live Skydrive账户。然后就像简单的拖放文件那样就行了,你可以根据需要在不同文件夹间拖放文件。每一个文件夹都有一个固定链接,这样你就可以轻易地与 你的朋友、家人或者网友进行分享。此外,你可以对个人私密文件夹进行加密保护。
(全文 …)

最近一段时间,我们网站升级。很多数据结构和URL结构变化很多,让很多数据都失去了监控。很幸运的是看到了这篇文章,提供了5个免费开源的数据挖掘软件,分享给大家。另外Google analytics 也是非常棒的数据挖掘和分析工具,建议大家好好研究这些工具。

Orange

五个免费开源的数据挖掘软件 | iwanna.cn 我想网Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。
(全文 …)

MongoDB系列文章推荐

作者: seasun

今天才发现这么一系列的学习笔记,绝对算是一个失误。下面是一个长达十节的MongoDB系列文章,几乎可以称作简单的中文文档。非常实用而系统。

MongoDB: 10. MapReduce

作者: seasun

上使用 Map/Reduce 进行并行 “统计” 很容易。

db.runCommand(
{
    mapreduce : <collection>,
    map : <mapfunction>,
    reduce : <reducefunction>
    [, query : <query filter object>]
    [, sort : <sort the query.  useful   optimization>] for
    [, limit : <number of objects to   from collection>] return
    [, out : <output-collection name>]
    [, keeptemp: < | >] true false
    [, finalize : <finalizefunction>]
    [, scope : <object where fields go into javascript global scope >]
    [, verbose :  ] true
});

(全文 …)

MongoDB: 9. Grid FS

作者: seasun

GridFS 的文件同样是保存在 db.collection 中,通常使用 fs.files 存储文件元数据信息,fs.chunks 存储文件内容。

存储海量文件,得启用 Auto-Sharding。

> admin.runCommand({ enablesharding: test })
> admin.runCommand({ shardcollection: test.fs.chunks, key:{files_id:1} })

PyMongo API 中有个 GridFS 对象,使用方法很简单。

>>> from pymongo import *
>>> from pymongo.objectid import ObjectId
>>> from gridfs import *
>>> from pprint import pprint

>>> conn = Connection()
>>> db = conn.test
>>> gfs = GridFS(db)

随便找个文件存到 GridFS 中,除了必须的 filename 外,还可以附加任意属性。
(全文 …)

MongoDB: 8. Sharding (2)

作者: seasun

Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠(high reliability)、高可用(high availability)还有些距离。

解决方案:

  • Shard: 使用 Replica Sets,确保每个数据节点都具有备份、自动容错转移、自动恢复能力。
  • Config: 使用 3 个配置服务器,确保元数据完整性(two-phase commit)。
  • Route: 配合 LVS,实现负载平衡,提高接入性能(high performance)。

以下我们配置一个 Replica Sets + Sharding 测试环境。
装个配置过程建议都用 IP 地址,以免出错。
(全文 …)

MongoDB: 8. Sharding (1)

作者: seasun

将海量的数据水平或垂直切割,分区存储到多台服务器上是一个最基本的现实需求。从 1.6 版开始, Sharding 总算打上了 “production-ready” 标记。

MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。

要构建一个 MongoDB Sharding Cluster,需要三种角色:

  • Shard Server: mongod 实例,用于存储实际的数据块。
  • Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
  • Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程数据库。

Route 转发请求到实际的目标服务进程,并将多个结果合并回传给客户端。Route 本身并不存储任何数据和状态,仅在启动时从 Config Server 获取信息。Config Server 上的任何变动都会传递给所有的 Route Process。
(全文 …)

2. Master/Slave

Master/Slave 是一种典型的备份方案, 支持 “One Master Multi Salver” 和 “Multi Master One Slave” 等多种部署方式。

先从简单的 “镜像备份” 开始。

$ sudo mkdir -p /var/mongodb/0
$ sudo mkdir -p /var/mongodb/1

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/0 --master
forked process: 1388
all output going to: /dev/null

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/1 --port 27018 --slave --source localhost:27017 --autoresync
forked process: 1401
all output going to: /dev/null

autoresync 参数会在系统发生意外情况造成主从数据不同步时,自动启动复制操作 (同步复制 10 分钟内仅执行一次)。除此之外,还可以用 –slavedelay 设定更新频率(秒)。
(全文 …)

最新的 1.6 版总算提供了 Replica Sets,比起有点莫名其妙的 Replica Pairs,这才是高可用集群所需要的。

1. Replica Sets

Replica Sets 使用 n 个 Mongod 节点,构建具备自动容错转移(auto-failover)、自动恢复(auto-recovery) 的高可用方案。通常使用 3 个 mongod 实例,或者 2 mongod + 1 arbiter 方案。

(1) 首先启动所需的 Mongod 节点。注意使用 replSet 参数指定 Sets Name。

$ sudo mkdir -p /var//0
$ sudo mkdir -p /var//1
$ sudo mkdir -p /var//2

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var//0 --port 27017 --replSet myset
forked process: 1166
all output going to: /dev/null

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var//1 --port 27018 --replSet myset
forked process: 1173
all output going to: /dev/null

$ sudo ./mongod --fork --logpath /dev/null --dbpath /var//2 --port 27019 --replSet myset
forked process: 1180
all output going to: /dev/null

(全文 …)

MongoDB: 6. Optimization

作者: seasun

1. Profiler

自带 Profiler,可以非常方便地记录下所有耗时过长操作,以便于调优。

> db.setProfilingLevel(n)

n:
   0: Off;
   1: Log Slow Operations;
   2: Log All Operations.

通常我们只关心 Slow Operation,Level 1 默认记录 >100ms 的操作,当然我们也可以自己调整 “db.setProfilingLevel(2, 300)”。
Profiler 信息保存在 system.profile (Capped Collection) 中。

准备 1000000 条数据测试一下。

>>> from pymongo import *
>>> from random import randint
>>> conn = Connection()
>>> db = conn.blog

>>> for i in xrange(1000000):
    u = dict(name = "user" + str(i), age = randint(10, 90))
    db.users.insert(u)

开始调优操作。
(全文 …)