文本数据库Jardb项目总结(一) 项目地址: https://github.com/andytt/jardb 想法 这两天时间,闲来无事,写了一个基于文件的数据库……用Python写的,效率也不能够有所期望。实现这个数据库,其实是受到了Node.js中有一个lowdb的项目的影响:文本、轻便、API极其好用。不需要支持多线程,不需要支持事务管理,不需要太多的性能。这个数据库主要还是在一些本地应用、小项目里面,提供类似应用配置管理、小型数据存储,给人以方便大概是最大的目的了吧。。。(当然最后的性能测试也超过了我的预期,见后) 其实写这个项目的时候我也有自己的打算,一来用Python多练练面对对象编程。一来,体验一下开源项目的流程。所以在这个项目里面,我花了不少经历提供了详细的文档和单元测试(96%),也算是拿出来给大家献丑了。 其实在已经有一个TinyDb的Py项目了,关注的人挺多,这个项目和我的思路都差不多,自然是需要先好好研究一番,阅读完代码之后,差不多就能够开始自己动手了。 设计之初我就这个几个初步的考虑,要不要使用引入事件机制、亦或者多线程的实现?大概在写完事件循环的部分之后,放弃了这个想法。倒不是因为实现困难,而是由于我的目标是对标小型化的,本地的数据库,轻便好用才是王道,负担重了反而显得不伦不类。 存储格式 存储格式的话,json是一个很好的选择:通用、方便、表达能力足够。。。另外一个就是基于pickle模块的二进制文本。最后便是直接存在内存里面。当然,作为一个超轻的框架,加密之类的功能不再实现,虽然也提供了结构,直接暴露了原始的存储格式,稍加封装,就能够实现这些功能了。最初打开数据库的时候,就需要指明数据库的文件位置和存储类型,用类似URL的格式来实现挺好的,比如:“json://database.db”…… 实现起来不难,用一个父类BaseStorage做接口,提供了write和read两个功能,而后由三个子类,分别实现json、pickle、memory的读写功能就行了。为了安全,存储的时候,都会将之前版本改为‘.bac’文件,且在写入的时候,先写入‘.swp’文件中,希望这样做能够提高一点安全性吧。 日志 日志模块,在我看来怕是这个框架的一个败笔。。。本来想实现一个适合这个数据库的日志类提供管理,最后却后悔没有直接用logging。。。只有一个类dblogging,其中根据配置的不同,可以选择把日志输出到终端或者是写进日志文件去。。。为了轻耦合,我选择了装饰器的模式: def logs(self,func): ''' A decorator If self.log is a file path,logs will be write into it. Otherwise if self.debug is on, logs will be printed in the terminal. You should know that both of them will cause the performance loss, especially when logs are shown in the terminal. ''' def wrapper(*args, **kwargs): if self.log != '': self.
Read more

新しい学期へ

25.03.2019  in

時間が流れると言われるんです。あと一週間で新学期は始まります。僕にとってこれは大切な後期です。進路を決める学期ですから。 一年生の時、初めて大学に入学した。一人暮らしの生活が始まった。多くの困難があった。成績も普通でした。確か二年生になった時、たくさん頑張って勉強した。成績も上がった。僕は友達に推薦されてIGEMという国際コンテストに参加した、そして銀賞を手に入れた。この機会で台湾やアメリカに行った、たくさん見習うできた。 新学期にもともと頑張ろうと思う。深度学習や日本語を習う。僕はさあ、大学院生になりたいです。そして、JLPT N1試験を参加したいです。 まだ道路は長いし、油断をするな!
Read more


服务器迁移记录 Seafile 和 Gitea 迁移记录 原因 我长期以来一直使用 滴滴云 作为主力服务器使用,这台服务器是1 core 1 GB 的配置。带宽 10 M,按量计费。有两块 20g 硬盘构成。之所以选用滴滴云主要是价格非常便宜,这个配置只需要 22 块钱一个月,个人用户流量也用不了太多。非常便宜。 说起回归阿里云的原因,是由于一起事故引发的。前几日,我临时在滴滴云上部署了 iGEM 招新登记系统 系统。我参加了 2018 年的 iGEM 比赛。回国之后自然要招收新的同学,于是临时写了这样的一个网站。过了几天之后,突然在一天崩溃,文件系统损坏。现象是 ip ping 不通,ssh 登录不了,控制台显示机器失联。我从早上8点开始联系客服人员,直到下午三点左右才恢复工作。 此前,滴滴云也发生过一次乱扣费的现象。这些事情,让我认识到,滴滴云作为新的 IDC 厂家,技术上还是不稳固的。因此决定迁移回阿里云。 购买服务器 最终购买了一台 2C4GB 的服务器(钱包空了)。并准备开始把之前的服务迁移过来。之前的服务器上一共运行有四个服务,一个自建的博客系统,一个私有云,一个私有 git 库以及临时部署的招新系统。除了博客是 angular 静态页面,其他全部使用 docker 部署,因此迁移起来问题不大。 转移 Seafile 我使用了很久一段时间的 nextcloud ,可是一直觉得不能很好的真正利用上这个软件,于是决定该用 Seafile ,实测好用。Seafile 使用的官方 docker 镜像。转移主要有几个步骤。 第一是把镜像中 /shared 下的全部文件通过 scp 或者 rsyne 同步到新服务器对应位置。 修改 run.sh 把服务器运行起来。我一般习惯测试时使用 tmux 前台跑 docker 镜像。 docker run -it --name seafile\ --net mynet\ --ip 172.
Read more


构建具有 netspeerder 加速的 SSR 容器环境 本文环境: CentOS 7 以上 第一步——内核配置 BBR: 利用脚本安装 BBR TCP 拥塞控制协议,BBR 协议对于高延迟大带宽的网络有非常好的优化作用,可以明显提高 ShadowSocksR 的使用体验。 参考链接: 秋水溢冰 —— 一键安装最新内核并开启 BBR 脚本 wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh 第二步——安装 docker: yum update -y yum install docker vim wget git 并开启 Docker 服务: systemctl start docker systemctl enable docker 第三步——运行镜像 安装带有 netspeeder加速的。下面示伪代码! docker run -d \ -p 443:8388/tcp \ # 端口号· -p 443:8388/udp \ # 端口号· -e ROOT_PASS="pass"\ # 容器 root 密码 lnterface/ssr-with-net_speeder \ -s 0.
Read more