Post Jobs

Thinkphp分布式数据库连接代码详解介绍,python实现排序算法解析

伟德体育 1

本文实例为大家分享了python实现排序算法的具体代码,供大家参考,具体内容如下

Thinkphp作为国内的一款流行框架,相信使用的人一定不在少数。本篇我们来分析一下Thinkphp中比较重要的一部分——分布式数据库的连接。

前言

一、冒泡排序

当然了,我们在这里不是去将如何使用模型去对数据库进行增删改查。我们是对其底层的连接代码做一个分析,可以帮助大家更好的理解thinkphp对数据库的操作。方便我们以后的使用。

python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍
python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非
unicode 问题。首先简要介绍字符串编码的历史,其次,讲解 python
对于字符串的处理,及编码的检测与转换,最后,介绍 python 爬虫采取的 json
数据存入文件时中文输出的问题。

def bububle_sort(alist):
 """冒泡排序(稳定|n^2m)"""
 n = len(alist)
 for j in range(n-1):
  count = 0
  for i in range(0,n-1-j):
   if alist[i]>alist[i+1]:
    count +=1
    alist[i], alist[i+1] = alist[i+1], alist[i]
  if count==0:
   return

伟德体育,一、单一数据库的连接

参考书籍:Python网络爬虫从入门到实践 by唐松

二、选择排序

在使用的时候,单一数据库的连接配置非常简单。我们只需要在配置文件中配置一下的信息即可。

在python 2或者3 ,字符串编码只有两类 :

def select_sort(alist):
  """选择排序(不稳定|n^2)"""
  n = len(alist)
  for j in range(n-1):
    min_index = j
    for i in range(j+1,n):
      if alist[min_index] > alist[i]:
        min_index = i
    alist[j], alist[min_index] = alist[min_index], alist[j]

‘DB_TYPE’ => ‘mysql’,
‘DB_HOST’ => ‘192.168.5.102’,
‘DB_NAME’ => ‘databasename’,
‘DB_USER’ => ‘user’,
‘DB_PWD’ => ‘password’,
‘DB_PORT’ => ‘3306’,
‘DB_PREFIX’ => ‘onmpw_’,

(1)通用的Unicode编码;

三、插入排序

设置完成以后就可以使用了。默认情况下就是单一的数据库连接。

(2)将Unicode转化为某种类型的编码,如UTF-8,GBK;

def insert_sort(alist):
  """插入排序(稳定|n^2)"""
  n = len(alist)
  for j in range(1,n):
    i = j
    while i>0:
      if alist[i] < alist[i-1]:
        alist[i], alist[i-1] = alist[i-1], alist[i]
        i -= 1
      else:
        break

二、分布式数据库的连接

1、计算机历史:

四、希尔排序

单一数据库的连接很简单,我们着重分析一下分布式数据库的连接。

计算机只处理数字,因此处理文本时,必须转换成数字才行。

def shell_sort(alist):
  """希尔排序(不稳定|n^2)"""
  n = len(alist)
  gap = n//2

  while gap>=1:
    for j in range(gap,n):
      i=j
      while i>0:
        if alist[i]<alist[i-gap]:
          alist[i], alist[i-gap] = alist[i-gap], alist[i]
          i -= gap
        else:
          break
    gap //=2

‘DB_TYPE’ => ‘mysql’,
‘DB_HOST’ => ‘192.168.5.191,192.168.5.88,192.168.5.103’,
‘DB_NAME’ => ‘test,test,test’,
‘DB_USER’ => ‘masteruser,slaveuser,slaveuser’,
‘DB_PWD’ => ‘masterpass,slavepass,slavepass’,
‘DB_PORT’ => ‘3306’,
‘DB_PREFIX’ => ”,
‘DB_DEPLOY_TYPE’        =>  1, // 数据库部署方式:0
集中式(单一服务器),1 分布式(主从服务器)
‘DB_RW_SEPARATE’        =>  true,       // 数据库读写是否分离
主从式有效
‘DB_MASTER_NUM’         =>  1, // 读写分离后 主服务器数量
‘DB_SLAVE_NO’           =>  ”, // 指定从服务器序号

8位(bit)=1字节(byte)=256种不同状态=从000000到111111;

五、快速排序

按照以上配置就可以连接分布式数据库了。

1GB=1024M=1024(1024kb)=1024(1024(1024b));

def quick_sort(alist, first, last):
  """快速排序(不稳定|n^2)"""
  if first >= last:
    return
  mid_value = alist[first]
  low = first
  high = last
  while low < high:
    #high左移
    while low <high and alist[high] >= mid_value:
      high -= 1
    alist[low] = alist[high]
    #low右移
    while low < high and alist[low] < mid_value:
      low += 1
    alist[high] =alist[low] 
  #从循环退出时,low=high
  alist[low] = mid_value

  #对low左边的列表执行快速排序
  quick_sort(alist, first, low-1)
  #对low右边的列表执行快速排序
  quick_sort(alist, low+1, last)

下面我们看下面几个选项

ASCII编码
是对应英文字符与二进制数字之间的关系;ASCII一共规定了128种,如大写字母A是65,即01000001;可见一字母一字节;

六、归并排序

‘DB_HOST’

GB2312编码 简体中文常见的编码,两个字节代表一个中文汉字
,理论上256*256个编码,即可表示65536种中文字;

def merge_sort(alist):
  """归并排序(稳定|nlgn)"""
  n = len(alist)
  if n <= 1:
    return alist
  mid = n//2

  #left 采用归并排序后形成新的有序列表
  left_li = merge_sort(alist[:mid])
  #right 采用归并排序后形成新的有序列表
  right_li = merge_sort(alist[mid:])

  #merge(left, right) 将两个有序的子序列合并为一个新的整体
  left_pointer, right_pointer = 0, 0
  result = []

  while left_pointer < len(left_li) and right_pointer<len(right_li):
    if left_li[left_pointer] < right_li[right_pointer]:
      result.append(left_li[left_pointer])
      left_pointer += 1
    else:
      result.append(right_li[right_pointer])
      right_pointer += 1

  result += left_li[left_pointer:]
  result += right_li[right_pointer:]
  return result

分布式数据库,有几台服务器就要填写几个服务器地址,每个地址之间用逗号隔开。如果是主从式分布的话,前面的地址要是主数据库的地址。

各国编码不同,为了各国能扩平台进行文本的转换与处理,Unicode就被作为统一码或者单一码。Unicode编码通常是两个字节,unicode与ASCII编码的区别,在于unicode在ASCII编码前加了一个0,即字母A的ASCII编码为01000001,unicode编码即为0000000001000001;但英文字母其实只用一个字节就够了,unicode编码写英文时多了一个字节,浪费存储空间。因而unicode开发了通用转换格式(Unicode
Transformation Format(UTF)),常见的有utf-8或者utf-16;

伟德体育 1

对于下面的用户名和密码还有监听端口之类的,当然是有几个就写几个。如果各个数据库的用户名和密码都一样的话,可以只写一个。

要明白encode()和decode()的区别

对于这些选项的解析的代码如下

encode()的作用是将Unicode编码的字符串转换为其他编码格式。

$_config[‘username’]  =  
explode(‘,’,$this->config[‘username’]);
$_config[‘password’]  =  
explode(‘,’,$this->config[‘password’]);
$_config[‘hostname’]  =  
explode(‘,’,$this->config[‘hostname’]);
$_config[‘hostport’]   =  
explode(‘,’,$this->config[‘hostport’]);
$_config[‘database’]  =  
explode(‘,’,$this->config[‘database’]);
$_config[‘dsn’]      =   explode(‘,’,$this->config[‘dsn’]);
$_config[‘charset’]   =   explode(‘,’,$this->config[‘charset’]);

例如:
st1.encode("utf-8")这句话的作用是将Unicode编码的st1编码为utf-8编码的字符串

‘DB_DEPLOY_TYPE’=>1

decode()的作用是把其他编码格式的字符串转换成Unicode编码的字符串。

1 表示是分布式, 0 表示的是集中式(也就是单一服务器)。

例如:
st2.decode("utf-8")这句话的作用是将utf-8编码的字符串st2解码为Unicode编码的字符串

该选项的实现是在类 Think\Db\Dirver中

第二,除Unicode编码的字符串以外,任何一种编码的字符串要想转换为其他编码格式,必须先解码后编码

protected function initConnect($master=true) {
    if(!empty($this->config[‘deploy’]))
       // 采用分布式数据库
       $this->_linkID = $this->multiConnect($master);
    else
       // 默认单数据库
       if ( !$this->_linkID ) $this->_linkID =
$this->connect();
}

非Unicode编码–> Unicode编码–>非Unicode编码

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图