推荐文章 New Blog
SQLITE虚表
SQLite的虚表的机制虚表是一种自定义的扩展,允许用户通过代码定制表的数据结构和数据内容;对于数据库引擎,它和普通表一样,允许进行大多数的sql操作。虚表和普通表的主要不同在于以下几点:1. 其表中的数据的来源不同;对于普通表,来源于数据库的行列值;而对于虚表,来源于用户自定义的函数,可以使数据库中的数据,也可以使其他的外部数据,如:磁盘文件(csv, excel)等;2. 虚表是sqlite的一种高级特性,它的实现基于sqlite module;3. 虚表被用于连接数据库引擎和可变的数据源,分为两种:internals and externals;4. internal modules的数据来自于数据库文件本身,它的主要目的并不是做普通表不能做的,而是作为智能视图,更具扩展性的、更方便的、更快速的...Oct. 21, 2015, 11:12 p.m.作者:zachary分类:数据库阅读(3575)评论(0)
sqlite缓存机制学习
SQLITE的模块性很强,缓存模块也是一样的,SQLITE提供了多种缓存机制可以选择,默认的是Pcache1。SQLITE缓存的管理是通过Pager管理的,下面通过Pcache提供一个接口,开发者可以自己编写自己的缓存策略。默认的缓存机制比较简单,也比较常用,算法使用的是LRU(最近最少使用算法),具体的实现,SQLITE使用了一个Hash表,两个LRU链表。如下图:1、hash表主要是加快对缓存中数据页的查找速度。SQLite是通过页号来进行hash操作的,hash后将其挂到对应的Hash链表上。2、LRU链表有两种,都是双向链表。一种是脏页链表,一个是干净页链表(没有修改过的页)。SQLite对hash表中页进行一次操作,就会将该页放到LRU链表的头部,因为该页是最近最常用到的。对于缓存的使用一般分成3步:1》查找缓存中是否存在该页,存在返回该页,不存在到第二步...Aug. 2, 2015, 10:51 p.m.作者:zachary分类:数据库阅读(1891)评论(0)
WAL模式学习
一、WAL模式优点缺点1、大多数场景下更快。2、读写之间不相互阻塞,更大的并行性。3、磁盘操作更顺序。4、使用更少的fsync()操作,减少系统脆弱的问题。1、需要文件系统支持共享内存2、使用sqlite的进程只能在当前主机上,不能使用网络文件系统3、事务对于单个数据库具有原子性,但对多个不具有。4、WAL模式下,不能更改数据库页大小5、不能使用只读的WAL模式数据库6、对大多数读和少量写会稍微慢一些7、多一个-wal文件和一个-shm共享内存文件8、需要一个额外的checkpoint操作9、对于大的事务,WAL会变慢,wal文件会增大,甚至导致IO或磁盘满的错误二、文件格式2.1、wal文件格式Wal文件的开始是一个wal文件头,后面就是一个个的数据帧。 每一个数据帧都有一个帧头如下所示 每一个数据帧对应着数据库中的一个单个页,并且可以在checkpoint后重用。一...July 15, 2015, 11:44 p.m.作者:zachary分类:数据库阅读(1800)评论(0)
BAE+BOS+UEditor
前段时间,使用BAE上传文档有时候会下不下来,直接输出"hello,1.6.10!",开始以为是文档有问题,后来BAE迁到了云平台,发现博客的图片全挂了直接看这些图片也是输出那个,然后看了一下百度的文档,原来这是是因为找不到了,doc文档和图片都是通过UEditor保存到文件中的,而BAE只支持临时文件所以过段时间文件就没了,一开始想用mysql存储这些东西,发现公用的只有1G,保存这些很快就会没了,所以找了找百度还有什么能存的服务,发现了BOS,虽然也收费不过不贵,可以接受,进过昨天的修复,我的blog又正常了。...May 2, 2015, 8:31 a.m.作者:zachary分类:我的空间阅读(1871)评论(0)
使用Python进行语音识别三
最后的语音识别本来想发完第二篇的时候就隔天发第三篇的,但是发现一个问题要想使用K临近需要具有相同的向量长度,这个问题想了一天,本来想定一个标准的长度,然后用线性插值(采样频率比较高所以影响不大,采样率低时可以使用非线性插值),但是算法写了一天,最后发现scipy中有这个库,代码如下,白写了很大的一段代码。def normal_time(data,windowsNum): '''规整到的窗口数目''' voiceLen=windows*windowsNum x=np.linspace(0,voiceLen,len(data)) f_lin...April 12, 2015, 10:24 p.m.作者:zachary分类:语音识别阅读(1842)评论(0)
使用Python进行语音识别二
获得MEL滤波器 本来这一篇就想把识别做完的,但是搜了一些文献,发现如果简单的使用能量和过零率识别率不高,而如果直接使用原生采样数据计算量有点大,所以就准备按照大多数文献说的将MFCC作为其中的一种特征参数,从而使用K临近算法好了,识别率会不会好不知道,这篇文章就简单的说一下如何用python获得MEL滤波器吧,后面的东西后面在做。直接贴代码:#encoding=utf-8 import wave import pylab as pl import numpy as np samprate=44100 filterNum=12 def mel2freq(mel_vec): '''mel频率变为线性频率&...April 8, 2015, 9:44 p.m.作者:zachary分类:语音识别阅读(2020)评论(0)
使用Python进行语音识别(一)
基于能量与过零率的端点检测一直想尝试着做语音识别的东西,就是简单的识别几个特定的声音也好,但是感觉网上的东西要么太水,要么太难,不过这几天突然有了一点灵感,借用机器学习进行识别不知道可不可行,于是就有了现在这篇博客了。这篇博客算是语音识别的第一步,对语音进行端点检测。写代码之前首先确保安装了必要的环境,这里说一下我的环境,window7,python2.7,numpy,scipy,pyaduio, Matplotlib。安装了这几个库就可以进行这里的实验了。下面正式进入实验。第一步,录音。这里使用pyaudio,首先将声音保存为文件。import pyaudio import wave p=pyaudio.PyAudio() stream=p.open(format=pyaudio.paInt16,#格式 &n...April 6, 2015, 10:47 a.m.作者:zachary分类:语音识别阅读(3772)评论(4)
kernel中信号量实现(二)
上一篇介绍了信号量可以使用waitqueue实现,这一篇主要讲waitqueue的实现,waitqueue故名思义就是等待队列。waitqueue在linux中的实现主要在下面文件中:include/linux/wait.h kernel/sched/wait.c一、先看数据结构struct __wait_queue_head { spinlock_t lock; ...Dec. 5, 2018, 2:55 a.m.作者:zachary分类:Linux相关阅读(2763)评论(0)
kernel中信号量实现(一)
kernel中很多地方使用了信号量机制,一个典型的实现就是内存回收的触发,在内存进入慢速路径后的第一件事就是唤醒kswapd工作。信号量的使用很简单,总结起来有下面几点:1、初始化信号量。wait_queue_head_t _wait; //变量定义 init_waitqueue_head(&_wait); //变量初始化2、工作线程一般是一个死循环,工作结束后调用wait,等待触发线程唤醒,唤醒后处理wait事件。while(1) { DEFINE_WAIT(wait); //定义临时变量 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRU...Nov. 27, 2018, 1 a.m.作者:zachary分类:Linux相关阅读(2846)评论(0)
进程退出时,内存回收流程
在android优化中,有一个是技术是ZRAM,ZRAM是基于swap技术的,前几天同事问了个问题,linux内核中通过kswapd或是直接reclaim一个进程到zram中,如果这个进程被杀,那这个进程对应在ZRAM中的内存会不会先解压然后在free,这个问题以前只是知道不会解压的,具体的流程不是很清楚,用了两天时间搞了明白,现在先上图: 进程退出最终调用的是do_exit函数,然后通过一层层vma,pud,pmd,pte找到所有的page,对应page如果是在swap中的,通过swap_slot_free_notify回调调用swap设备中的notify方法,直接释放swap中的页,如果不是在swap中最终通过调用free_pages_and_swap_cache释放到buddy系统中,这里如果是0阶页通过free_hot_cold_p...July 29, 2017, 8:27 a.m.作者:zachary分类:Linux相关阅读(2397)评论(0)