由于一些原因,小沃将自己的官方网站从原来的阿里云迁移到了justg的vps上,服务器配置也从原理的1核1G变为了1核512M。虽然服务器性能所有下降,但是毕竟小沃的官网是使用了百度的cdn的,因此应付高并发还是没有什么问题的。考虑到服务器性能的下降,小沃决定做一件一直想做但是又没有做的事情---将网站从使用mysql数据库改为使用sqlite数据库。至于为什么要做这个调整,主要是考虑到置于cdn后的网站并发本来就不可能高,而且sqlite数据库在idle状态下消耗内存是0,对于内存降低的小沃所用官网服务器,还是比较合适的。
由于小沃官网原来连接数据库用的就是pdo,因此从mysql改为sqlite基本没什么难度,下面介绍下mysql与sqlite的语法差异。
1、left join与left out join
在mysql中有内连接,左连接,右连接,交叉连接4种连接,但是sqlite中没有右连接。并且写法有所不同。
可以直接写成out join或是left out join,但是mysql中最长用的left join却无法被识别。
2、不支持md5等加密函数
在mysql中可以直接使用MD5这个函数由数据库帮我们计算,但是sqlite中,这个函数原生不支持。因此最好不要直接使用这个函数。
3、没有NOW()函数,CURRENT_TIMESTAMP也是格林时间的表达方式
当使用datetime类型的时候,常常将默认值设置为NOW()或是CURRENT_TIMESTAMP,但是你会发现,生成的默认时间永远比实际使用晚8小时。因此遇到这个问题,官方的建议是将默认值设置为datetime('now', 'localtime'),具体设置方式如下:create table log(
logtime TIMESTAMP NOT NULL DEFAULT (datetime('now', 'localtime')
)
4、创建表时主键不能用unsigned big int
在mysql中,主键一般会设置为自增长,并且类型使用unsigned big int,但是在sqlite中,要想自增长就必须设置为INTEGER型。
文章作者:沃航科技