显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 
 
 
 

MySQL数据库的高可用性分析

2016-11-22 0:21:51 阅读26 评论0 222016/11 Nov22

源:qcloud.com

MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目前采用较多的保障MySQL可用性方案。

MySQL Replication

MySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个实例中。Replication为保证数据安全做了重要的保证,也是现在运用最广的MySQL容灾方案。Replication用两个或以上的实例搭建了MySQL主从复制集群,提供单点写入,多点读取的服务,实现了读的scale out。

图1. MySQL Replication主从复制集群

如图一所示,一个主实例(M),三个从实例(S),通过replication,Master生成event的binlog,然后发给slave,Slave将event写入relaylog,然后将其提交到自身数据库中,实现主从数据同步。对于数据库之上的业务层来说,基于MySQL的主从复制集群,单点写入Master,在event同步到Slave后,读逻辑可以从任何一个Slave读取数据,以读写分离的方式,大大降低Master的运行负载,同时提升了Slave的资源利用。

对于高可用来说,MySQL Replication有个重要的缺陷:数据复制的时延。在通常情况下,MySQL Replication数据复制是异步的,即是MySQL写binlog后,发送给Slave

作者  | 2016-11-22 0:21:51 | 阅读(26) |评论(0) | 阅读全文>>

MySql中的几种优化方案(EXPLAIN)

2016-11-21 12:20:25 阅读16 评论0 212016/11 Nov21

源:韩锋

下面在介绍工具使用之前,首先说明下MySQL中语句优化常用的手段、方法及需要注意的问题。这也是大家在日常手工优化中,需要了解掌握的。

1、执行计划 — EXPLAIN命令

执行计划是语句优化的主要切入点,通过执行计划的判读了解语句的执行过程。在执行计划生成方面,MySQL与Oracle明显不同,它不会缓存执行计划,每次都执行“硬解析”。查看执行计划的方法,就是使用EXPLAIN命令。

基本用法

EXPLAIN QUERY

当在一个Select语句前使用关键字EXPLAIN时,MySQL会解释了即将如何运行该Select语句,它显示了表如何连接、连接的顺序等信息。

EXPLAIN EXTENDED QUERY

当使用EXTENDED关键字时,EXPLAIN产生附加信息,可以用SHOW WARNINGS浏览。该信息显示优化器限定SELECT语句中的表和列名,重写并且执行优化规则后SELECT语句是什么样子,并且还可能包括优化过程的其它注解。在MySQL5.0及更新的版本里都可以使用,在MySQL5.1里它有额外增加了一个过滤列(filtered)。

EXPLAIN PARTITIONS QUERY

显示的是查询要访问的数据分片——如果有分片的话。它只能在MySQL5.1及更新的版本里使用。

EXPLAIN FORMAT=JSON (5.6新特性)

另一个格式显示执行计划。可以看到诸如表间关联方式等信息。

作者  | 2016-11-21 12:20:25 | 阅读(16) |评论(0) | 阅读全文>>

关于Python中的易错点

2016-11-10 0:29:48 阅读25 评论0 102016/11 Nov10

源: 关于Python的一些吐槽

不符合预期的函数默认参数

Python函数默认参数中如果使用了mutable对象,那么这个参数是共享的,

def foobar(nums=[]): nums.append(1) print sum(nums) >>> foobar() 1 >>> foobar() 2 >>> foobar() 3

这是一个容易产生bug的语言特性,曾经也踩过这个坑。StackOverflow也有关于此的讨论。不少Python Best Practice会提醒我们避开这种使用方式,但如果一开始就符合预期,应该会更好。

不符合直觉的循环中的lambda定义

同样也是一个容易产生bug的特性,

funcs = [] for x in xrange(5): funcs.append(lambda: x + 1) for func in funcs: print func()

上述代码的输出全都是5,lambda中的x被绑定至了最后一次出现的值。因为这种不当使用导致的bug,估计不少人都遇到过。

记不清的de >__getattr__de>, de >__getattribute__de>

这两个函数其中一个是每次属性访问的时候都会被调用、另一个是当对象上没有该属性时被调用。功能很容易理解,但记忆上却很容易混淆,每次记清楚之后一段时间未用,就又搞不清了,只能运行遍代码试试。

作者  | 2016-11-10 0:29:48 | 阅读(25) |评论(0) | 阅读全文>>

Python openvc 视频监控(小试)

2016-11-7 18:29:45 阅读16 评论0 72016/11 Nov7

由于是草稿版本,直接上代码了:

#coding:gbk

#由于是win平台,所以编码是:gbk

__author__ = 'fc_lamp'

'''

#视频格式

cv2.cv.CV_FOURCC('I','4','2','0'):这是未压缩的YUV, 采用4:2:0色度抽样。这种编码方式兼容度最高,但生成的文件也比较大。文件扩展名应为avi。

cv2.cv.CV_FOURCC('P','I','M','1'):MPEG-1编码。文件扩展名应为avi。

cv2.cv.CV_FOURCC('M','J','P','G'):motion-JPEG编码。文件扩展名应为avi。

cv2.cv.CV_FOURCC('T','H','E','O') :Ogg-Vorbis编码。 文件扩展名应为 ogv。

cv2.cv.CV_FOURCC('F','L','V','1') :Flash视频。文件扩展名应为flv。

'''

#http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy .whl文件还要安装pip和wheel

#python2.7 numpy x64

import numpy

#http://opencv.org/

import cv2

import os

import uuid

import time

作者  | 2016-11-7 18:29:45 | 阅读(16) |评论(0) | 阅读全文>>

Python 简单实验装饰器 @

2016-11-7 14:10:29 阅读25 评论0 72016/11 Nov7

(来源:python开发者)

Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里。 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数。 def say_hello(): print "hello!" def say_goodbye(): print "hello!" # bug here if __name__ == '__main__': say_hello() say_goodbye() 但是在实际调用中,我们发现程序出错了,上面的代码打印了两个hello。经过调试你发现是say_goodbye()出错了。老板要求调用每个方法前都要记录进入函数的名称,比如这样: [DEBUG]: Enter say_hello() Hello! [DEBUG]: Enter say_goodbye() Goodbye! 好,小A是个毕业生,他是这样实现的。 def say_hello(): print "[DEBUG]: enter say_hello()" print "hello!" def say_goodbye(): print "[DEBUG]: enter say_goodbye()" print "hello!" if __name__ == '__main__': say_hello() say_goodbye() 很low吧? 嗯是的。小B工作有一段时间了,他告诉小A可以这样写。 def

作者  | 2016-11-7 14:10:29 | 阅读(25) |评论(0) | 阅读全文>>

我们在使用node-webkit(https://github.com/nwjs/nw.js) 制作exe(桌面应用)程序时发现,对于有触屏操作的系统,竟然无法正常点击或者无法拖动。(fc_lamp)(chromium args)

后来,反复测试与查阅相关资料发现是,google chrome浏览器 touch-events 事件没有正常的被启用。

如果,在google chrome 浏览器中,touch-events(无法触屏)则可在浏览器地地栏上输入如下命令:

chrome://flags/

然后找到:

启用触摸事件 Mac, Windows, Linux, Chrome OS

..........#touch-events

将#touch-events 值修改为 已启用 即可解决无法触屏问题。但在node-webkit中则不同。

虽然node-webkit打包成的是exe应用程序,但因为node-webkit中使用的是chrome 的内核(chromium),所以我们可以通过“chromium args”参数来解决这一问题。

打开package.json 文件(假设你已正确安装node-webkit),添加如下代码:

"keywords": [ "demo", "node-webkit" ],

"window": {

"title": "zzd",

"icon": "logo.png",

作者  | 2016-11-5 23:33:56 | 阅读(22) |评论(0) | 阅读全文>>

使用 node-webkit、HTML5制作桌面应用程序

2016-11-3 17:01:33 阅读23 评论0 32016/11 Nov3

中文文档:http://www.cnblogs.com/xuanhun/category/568577.html

项目地址:https://github.com/nwjs/nw.js

作者  | 2016-11-3 17:01:33 | 阅读(23) |评论(0) | 阅读全文>>

关于 sqlite3中的数据类型

2016-10-30 18:14:05 阅读31 评论0 302016/10 Oct30

大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。

Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。

1.  存储类和数据类型

每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:

l  NULL,值是NULL

l  INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放

l  REAL,值是浮点型值,以8字节IEEE浮点数存放

l  TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放

l  BLOB,只是一个数据块,完全按照输入存放(即没有准换)

从上可以看出存储类比数据类型更一般化。比如INTEGER存储类,包括6中不同长度的不同整形数据类型,这在磁盘上造成了差异。但是只要INTEGER值被从磁盘读出进入到内存进行处理,它们被转换成最一般的数据类型(8-字节有符号整形)。

Sqlite

作者  | 2016-10-30 18:14:05 | 阅读(31) |评论(0) | 阅读全文>>

一 首先需要说明的是(Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用):

     sqlite中指明AUTOINCREMENT 属性时,只能针对 INTEGER 类型字段。

sqlite中可使用 last_insert_rowid()来获取最近ID值,eg:select last_insert_rowid() as id

二来自:http://www.cnblogs.com/peida/archive/2008/11/29/1343832.html

在用sqlite设计表时,突然想到一个问题,就是我设计的表中,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由sqlite引擎来维护的,在3.0以前rowid是32位的整数,3.0以后是64位的整数,为什么不直接使用这个内部的rowid作为每个表的id主键呢。

想到就立即先查找一下sqlite的文档,看看用指定INTEGER PRIMARY KEY AUTOINCREMENT 和不指定自增长字段用rowid有什么区别。相关的文档在这里:

http://www.sqlite.org/autoinc.html

作者  | 2016-10-30 18:12:10 | 阅读(22) |评论(0) | 阅读全文>>

Python SQLite3 的简单使用

2016-10-30 17:32:55 阅读20 评论0 302016/10 Oct30

摘自:廖雪峰

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

在使用SQLite前,我们先要搞清楚几个概念:

表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。

要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection;

连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。

Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。

由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。

我们在Python交互式命令行实践一下:

作者  | 2016-10-30 17:32:55 | 阅读(20) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 

有道博客搜索

 
 
 
 
 
 
 

四川省 成都市

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 

小工具

 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016

注册 登录  
 加关注