随笔分类 - 数据库
记录与数据库相关
摘要:数字很难标明业务含义,大脑难记忆,前端的沟通成本增加,传错数字后,数据则插错表,调试定位困难,消耗了精力。 解决方案是: 避开数字标识。客户端使用字符串为参数,告诉服务端,如微信的支付类型使用trade_type=JSAPI|MWEB分别表示公众号支付和h5支付。这里若使用数字,确实难以理解业务意义
阅读全文
摘要:笔者觉得,分库分表确实好的。但是,动不动搞分库分表,太麻烦了。分库分表虽然是提高数据库性能的常规办法,但是太麻烦了。所以,尝试研究mysql的分区到底如何。 之前写过一篇文章,http://www.cnblogs.com/wangtao_20/p/7115962.html 讨论过订单表的分库分表,折
阅读全文
摘要:原创文章,转载注明出处 一、两种方案分库分表 一般业界,对订单数据的分库分表,笔者了解,有两类思路:按照订单号来切分、按照用户id来切分。 方案一、按照订单号来做hash分散订单数据 把订单号看作是一个字符串,做hash,分散到多个服务器去。 具体到哪个库、哪个表存储数据呢?订单号里面的数字来记录着
阅读全文
摘要:本文为原创文章,转载希望注明出处。 抢购业务数据库需要考虑的点如下: 一、超卖现象 场景如下: 库存数是5。现在3个用户来购买,a用户购买2个,b用户购买3个,c用户购买1个。合起来就是准备购买6个。 如果三个用户是同时并发购买,会出现怎样的情况呢? 每个用户进行减库存的时候,语句类似于: mysq
阅读全文
摘要:一、如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0。 Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行。 主从复制数据时,在从
阅读全文
摘要:做统计的时候,null是不计算在count以内的。所以字段的值最好不要设置为null。 比如:select count(user_id) as beyond_num from fs_users_added where credits<410 && user_id!=75语句,就统计不到null的数据
阅读全文
摘要:有个资料看得我云里雾里的。现在用自己的言语来总结一下,写文字,能够加深自己的理解。也会在写的过程中帮助自己发现理解方面瑕疵,继续查资料求证。短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysqlserver的链接。于是多少次php执行,就会多少次这样的创建和释放过程。频繁地创建和释放连...
阅读全文
摘要:了解硬盘的原理对于编程,做数据优化(比如磁盘i/0瓶颈,机械硬盘慢的原因)都是有好处的。以前总觉得不太需要了解这些,但是越是做到后面,发现,了解计算机各个组件的原理,其实才能理解更加深入的知识,否则永远只是一个敲代码的工人。里面之所以开辟一个专门的章节讲解磁盘的原理,是理解到磁盘在数据库优化中的重要...
阅读全文
摘要:scale 英文是扩展的意思。数据库要进行扩展,指的是存储系统不够,或者性能不够,要提升的时候,就要进行扩展。分为向上扩展和横向扩展,这就像一个人往上面发展与横向发展两种思路。scale-up:往上方向去扩展,就是提高单机的性能,比如数据库调优,硬件上的调优等等。都是从一个提升上来考虑。scale-...
阅读全文
摘要:目前遇到的情况有:一、数据库进行在线ddl(修改表结构和字段)也是使用重名表名的方式。复制一张表,包括里面的数据,假设名称为tmp。在这张tmp表上面执行dll语句操作。此时要记录某个时刻开始对数据库的更新操作sql,缓存起来。执行dll操作完毕。就把之前缓存起的sql放到这个tmp表中执行一遍。二...
阅读全文
摘要:实际上在,做web开发,比较少遇到使用一些算法之类的,毕竟不是做搜索引擎,也不是写底层(比如写个类似于mysql这样的数据库,里面需要自己实现排序算法),另外,每种语言,比如java,php都或多或少已经封装好排序函数给程序员使用。比如有个共识,大家做web开发的基本都明白,业务逻辑多比较简单,不是...
阅读全文
摘要:原来的mysql_connect是非持久连接,所以即使你在当前脚本中没有使用mysql_close函数进行关闭连接。脚本执行完毕后,连接标识会自动释放掉。这里是什么完成自动上释放的操作呢?php跟java一样,有一个垃圾资源回收系统,对于不再用到的资源会自动进行内存回收。怎么实现的,不知道。pconnect()是建立持久连接,特点是:当前脚本执行完毕后。该连接标识不会被释放掉。下一个脚本文件还可以使用。持久连接的实际用处:假如一个php脚本文件,同时会有多个用户访问该页面。里面涉及到数据库查询操作。如果使用非持久连接的话,那么每个用户都会从新建立一个数据库连接。而持久连接,多个用户访问同一个文
阅读全文
摘要:先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作?假设一个文章表里面包含几个字段:文章id、文章作者、文章标题、文章内容比如,我们对文章内容这个字段artilce_content建立全文索引,这样方便对文章里面的内容使用关键词搜索。数据库系统首先需要从文章内容(这个字段内容)中提取关键词,因为只有提取了关键词,才好建立类似索引目录—类似于新华字典那样的笔画页码对应关系,当你搜索一个词语”beijing”的时候,就直接去索引中查找,然后就可以定位到数据行的具体位置了,不需要扫描文章表很多行。这就像,如果我想去新华字典中查找一个汉字,我直接按照笔画或者按照拼音来查找(这个就是新华字典
阅读全文
摘要:目前关系型数据库系统中有两种锁定模型:一种是mvcc(Multi-Version Concurrency Control),方便并发控制的。大多数rdbms都是使用这种方式实现。读不加锁,写加锁的机制。另外一种是Lock-Based Concurrency Control要多补充点数据库理论知识了术语ACID概念原子性(Atomicity) A一致性(Consistency) C隔离性(Isolation)I持久性(Durability)D传统的关系型数据库必须会实现上面几个点的。而mongodb是不会的。发生crash(意外崩溃)数据容易出现问题。mongodb采用的mmap机制,在断电和某
阅读全文
摘要:insert into test_fulltext values("王正科技全文")select * from test_fulltext where data like "%王正%"能够搜索到新插入的一行数据。data字段并不是全文索引字段。其实反而不要使用match against去搜索,也就是不要使用全文搜索,使用全文搜索的话,会进入全文索引结构中去寻找数据。而刚好mysql对中文分词支持存在问题。所以mysql全文索引中建立的词典索引中不存在那个词语,比如select * from test_fulltext where MATCH(data)
阅读全文
摘要:------------------------时间的格式date [OPTION]... [+FORMAT]echo `date 空格 +'时间格式串'` 调用date必须加符号反引号``,表示执行里面的结果当为: `date +'%Y%m%d-%H:%M:%S'`没有时分秒的情况下,不需要用''将格式包含起来。但是增加时分秒后,如果还这样子用 `date +%Y%m%d %H:%M:%S` 则会报错:date: extra operand `%H:%M:%S'将其看成是额外的参数去了。如果日期与时间有符号连接起来,则不会:%Y%m%d
阅读全文
摘要:在网上看到一个知识点如下:对机械硬盘来说,1秒可以完成150次左右的随机I/O。而结合设计优良的Hash算法,内存查找可以每秒执行40万次左右。硬盘的随机读写能力决定了其读写的最差性能===========================后来我看了斯坦福大学的《数据库系统实现》一书对硬盘原理的讲解,我根据里面对硬盘的读写速度统计我尝试计算一下是可以得到上面结果:1秒=1000ms(毫秒)完成一次硬盘旋转平均为10ms(这是最慢的情况下),所以一秒可以有1000ms/10ms=100次随机i/0因为是最差的情况下才是10ms,所以一秒150次i/0差不多。确实,对硬盘读写数据的速度与对内存进行读
阅读全文
摘要:整理这篇文章的缘由:互联网应用会频繁加功能,修改需求。那么表结构也会经常修改,加字段,加索引。在线直接在生产环境的表中修改表结构,对用户使用网站是有影响。以前我一直为这个问题头痛。当然那个时候不需要我来考虑,虽然我们没专门的dba,他们数据量比我们更大,那这种问题也会存在。所以我很想看看业界是怎么做的,我想寻找有没有更高级的方案,呵呵,让我觉得每次开发一个新功能,我在线加字段都比较纠结。后来只知道,不清楚在什么时候,无意中看到一个资料介绍online-schema-change这个工具,于是顺便搜出了不少东西。后来逐渐发现腾讯,淘宝他们都会存在这种问题,我发现解决思路都差不多。具体看完我这篇归
阅读全文
摘要:字段不要使用null值。查询,索引方面不利。如果是整型,int,仅仅是设置 not null还不够。最好是这种一个默认的值0。为什么?text类型处理性能低于varchar。尽量不要使用text/blog数据类型,使用的话。拆分到单独的表中存储。与阿里巴巴一个思想:大容量的数据不要存到数据库中去,比如图片,url。将字符存储转换为数字存储。比如ip用int存储。为什么字符型数据建立索引,索引的名称要建立前缀:idx_pinyin是考虑字母的区分度吗?字母越长越容易区分?它们习惯建立索引的命名规则是:idx_字段名。拒绝大SQL,拆解成多条简单SQL。对于高并发的情况下,非常有利,避免一条复杂的
阅读全文