内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制,以下是蓝草使用的一些感受。 1、heap对所有用户的连接是可见的,这使得它非常适合做缓存。 2、仅适合使用的场合。heap不允许使用xxxTEXT和xxxBLOB数据类型;只允许使用=和<=>操作符来搜索记录(不允许& lt;、>、<=或>=);不支持auto_increment;只允许对非空数据列进行索引(not null)。 注:操作符 “<=>” 说明:NULL-safe equal.这个操作符和“=”操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。 3、一旦服务器重启,所有heap表数据丢失,但是heap表结构仍然存在,因为heap表结构是存放在实际数据库路径下的,不会自动删除。重启之后,heap将被清空,这时候对heap的查询结果都是空的。 4、如果heap是复制的某数据表,则复制之后所有主键、索引、自增等格式将不复存在,需要重新添加主键和索引,如果需要的话。 5、对于重启造成的数据丢失,有以下的解决办法: a、在任何查询之前,执行一次简单的查询,判断heap表是否存在数据,如果不存在,则把数据重新写入,或者DROP表重新复制某张表。这需要多做一次查询。不过可以写成include文件,在需要用该heap表的页面随时调用,比较方便。 b、对于需要该heap表的页面,在该页面第一次且仅在第一次查询该表时,对数据集结果进行判断,如果结果为空,则需要重新写入数据。这样可以节省一次查询。 c、更好的办法是在mysql每次重新启动时自动写入数据到heap,但是需要配置服务器,过程比较复杂,通用性受到限制。 蓝草目前采用的是第二种办法。 6、一些预期可能用到的sql语句 //如果表存在,则删除 DROP TABLE IF EXISTS `abc`; //复制整张表xyz为heap表abc(包含所有数据) CREATE TABLE `abc` type=heap select * from `xyz`; //添加主键id ALTER TABLE `abc` ADD PRIMARY KEY (`id`); //添加索引username ALTER TABLE `abc` ADD INDEX `abc` (`username`); 7.建表实例 CREATE TABLE `DB` ( `id` int(11)… Read more »
Monthly Archives:: 一月 2009
mysql 删除表中的重复记录,只保留其中一条
MySQL中漏掉了40%左右的数据,寻找这个错误的代价是花了三天,将所有的代码重新检查了一遍,由于代码不是我写的,看得晕头转向,上苍保佑,我还不算太笨,最终找到了原因,不过接着就碰到另外一个问题,找回的数据中存在重复,而且在无法在重复的健上建立唯一,于是我想了一个最笨的方法 SELECT * FROM sub_new WHERE email IN ( SELECT email FROM sub_new GROUP BY email HAVING COUNT(email) > 1 ) 这种算法是最傻也是最没出息的算法,在数量在1W的时候还可以接受,到10W就要两分钟了,到50W就死在那里了,所以告诫那些跟我一样天资不算聪明的人,数据量比较大的时候千万别用这种方法,这种类似冒泡排序的算法复杂度是O(n^2),如果你有10W条记录,你自己乘一下吧 接着又想了另外一个方法,虽然机械了点,不过效率非常之高,分三步走: CREATE TABLE tmp AS SELECT * FROM youtable GROUP BY name DROP TABLE youtable ALTER TABLE tmp… Read more »
ubuntu下PDF乱码解决方法
刚刚用PDF查看了一下别人windows上共享的文件,发现左边的书签是正常的中文,内容居然是乱码,想了一下,大概是缺少CJK字符集支持,于是apt-cache search CJK fonts 找到一个poppler-data,接着sudo apt-get install poppler-data ,安装好了,再打开一切OK 事实上这个不仅在PDF乱码的时候有用,在其他文件格式也有用,比如office文件,虽然这些文件很少乱码, 当然,如果你是默认中文安装,这一切都不是问题,在安装系统的时候都已经自动安装了
configure: error 解决方法
图新鲜玩8.10一段时间,最终在显卡驱动崩溃的情形下换回8.04LTS,心里头那个郁闷阿,所有的环境都得重新编译和设置。配置完VIM之后,编译lamp环境,./configure时出现错误如下: configure: error: in `/home/muxi/software/backup/httpd-2.2.11/srclib/apr’: configure: error: C compiler cannot create executables See `config.log’ for more details. 仔细查看了config.log没有发现任何异常,于是我决定再看一眼,原来 libc6-dev = n,找到问题就简单了, sudo apt-get install libc6-dev 一个17M的安装包就自动完事了 重新敲入编译命令,一切OK
PHP服务器变量$_SERVER详解
1、$_SESSION['PHP_SELF'] — 获取当前正在执行脚本的文件名 2、$_SERVER['SERVER_PROTOCOL'] — 请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。 3、$_SERVER['REQUEST_TIME'] — 请求开始时的时间戳。从 PHP 5.1.0 起有效。和time函数效果一样。 4、$_SERVER['argv'] — 传递给该脚本的参数。我试了下,get方法可以得到$_SERVER['argv'][0];post方法无法给他赋值。 5、$_SERVER['SERVER_NAME'] — 返回当前主机名。 6、$_SERVER['SERVER_SOFTWARE'] — 服务器标识的字串,在响应请求时的头信息中给出。 如Microsoft-IIS/6.0 7、$_SERVER['REQUEST_METHOD'] — 访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。 8、$_SERVER['QUERY_STRING'] — 查询(query)的字符串(URL 中第一个问号 ? 之后的内容)。 9、$_SERVER['DOCUMENT_ROOT'] — 当前运行脚本所在的文档根目录。在服务器配置文件中定义。 如E:\server 10、$_SERVER['HTTP_ACCEPT'] — 当前请求的 Accept: 头信息的内容。 11、$_SERVER['HTTP_ACCEPT_CHARSET'] — 当前请求的 Accept-Charset: 头信息的内容。例如:“iso-8859-1,*,utf-8”。 12、$_SERVER['HTTP_ACCEPT_ENCODING'] — 当前请求的 Accept-Encoding: 头信息的内容。例如:“gzip”。 13、$_SERVER['HTTP_ACCEPT_LANGUAGE'] — 当前请求的 Accept-Language: 头信息的内容。例如:“en”。… Read more »
That is why i love linux
Reason 1. The spirit of share Reson 2. Can do anything by terminal Reason 3.What i want ,that i can do. Reason 4. Vim, the magical editor
RAID3 Working Principle
Characteristics/Advantages 1. Very high Read data transfer rate 2. Very high Write data transfer rate 3. Disk failure has an insignificant impact on throughput 4. Low ratio of ECC (Parity) disks to data disks means high efficiency Disadvantages 1. Transaction rate equal to that of a single disk drive at best (if spindles are synchronized)… Read more »
RouterOS批量限速脚本
:for aaa from 1 to 254 do={/queue simple add name=(queue . $aaa) dst-address=(192.168.0. . $aaa)/32 interface=all parent=none \ priority=8 queue=default/default limit-at=0/0 max-limit=0/0 \ burst-time=6m/6m total-queue=default disabled=no 其中的1 to 254 是192.168.0.1-192.168.0.254,其中”\”是对换行的转义,脚本过长需要换行必须在行尾加上这个, 我这里设置了一个自动限速,在6分钟可以突破最大限速,如果6分钟内的平均速度是超过最大值,那么以后的速度将是设置的最大值,直到这次网络连接断开,断开后重新计算。 使用: WinBox-System-Scripts-+ Name(脚本名程) Source(脚本) 把以上脚本复制到Source 项目里面,点击 OK-选择要运行的脚本-Run Script 查看: 限速:WinBox-Queues-Simple Queues(看是否已经填加进来)
为什么要做持久化和ORM设计
在目前的企业应用系统设计中,MVC,即 Model(模型)- View(视图)- Control(控制)为主要的系统架构模式。MVC 中的 Model 包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如 JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC 模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。而 ORM 作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。 简单来说,按通常的系统设计,使用 JDBC 操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。 一般基本都是如下几个步骤: 1、建立数据库连接,获得 Connection 对象。 2、根据用户的输入组装查询 SQL 语句。 3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。 4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。 5、然后一条一条读取结果集 ResultSet 对象中的数据。 6、根据读取到的数据,按特定的业务逻辑进行计算。 7、根据计算得到的结果再组装更新 SQL 语句。 8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。 7、最后依次关闭各个 Statement 对象和 Connection 对象。 由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑完全混杂在一块。而一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。 所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现 ORM… Read more »
Start Daemons Automatically in OpenBSD
OpenBSD use an rc(8) style startup ,This use few key files for startup. /etc/rc ~ Main script ,should not be edited /ect/rc.conf ~ Configuration file use by /etc/rc to known what daemons should start with system /ect/rc.conf.local ~ configuration file you can override settings in /etc/rc.conf /etc/netstart ~ Script used to initialize the network .Should… Read more »
Recent Comments