提升SQLite数据插入效率低、速度慢的方法

前言

SQLite数据库由于其简单、灵活、轻量、开源,已经被越来越多的被应用到中小型应用中。甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作。因此我最近编写有关遥感数据处理的程序的时候,也将SQLite引入进来,以提高数据的结构化程度,并且提高大数据的处理能力(SQLite最高支持2PB大小的数据)。但是最开始,我发现,直接使用SQL语句的插入效率简直低的令人发指的。后来不断查文档、查资料,才发现了一条快速的“数据插入”之路。本文就以插入数据为例,整合网上和资料书中的各种提高SQLite效率的方法,给出提高SQLite数据插入效率的完整方法。(大神们勿喷)

1 数据

我使用的电脑是Win7 64位系统,使用VC2010编译,SQLIte版本为3.7.15.2 ,电脑CPU为二代i3处理器,内存6G。
实验之前,先建立要插入数据的表:

2 慢速——最粗暴的方法

SQLite的API中直接执行SQL的函数是:

直接使用INSERT语句的字符串进行插入,程序部分代码(完整代码见后文),如下:
继续阅读 »

树莓派配置文档 config.txt 说明

由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在”config.txt”这个文本文件中.

树莓派的config.txt文件会在ARM内核初始化之前被GPU读取.

这个文件存在引导分区上的.对于Linux, 路径通常是/boot/config.txt, 如果是Windows (或者OS X) 它会被识别为SD卡中可访问部分的一个普通文件.

如果想要编辑配置文件, 请查看介绍编辑树莓派配置文件.

你可以使用下列命令去获取当前激活的设置:

- 列出指定的配置参数.
- 例如: vcgencmd get_config arm_freq
vcgencmd get_config
- 列出所有已设置的整形配置参数(非零)
vcgencmd get_config int
- 列出所有已设置的字符型配置参数(非零)
vcgencmd get_config str

继续阅读 »

BUILD A 64-BIT KERNEL FOR YOUR RASPBERRY PI 3

EDIT : After writing this blog post I’ve started a 64-bit OS for the Raspberry Pi 3, based on Debian. You can find it here.

The Raspberry Pi 3 ships with a Broadcom BCM2837 64bit ARMv8 quad core Cortex A53 processor, which is a 64-bit CPU. If you own one of these, running the following command might surprise you :

> uname -a
Linux raspberrypi 4.4.34-v7+ #930 SMP Wed Nov 23 15:20:41 GMT 2016 armv7l GNU/Linux

Yes, this is a 32-bit kernel. The reason for this is that the Raspberry Pi foundation doesn’t yet provides a 64-bit version of Raspbian, the official OS for Raspberry Pi. It is however possible to build one, thanks to the various patches sent by Electron752.

Build the Kernel

The Raspberry Pi foundation maintains their own fork of the Linux Kernel which is especially tailored for their devices, while upstream gets merged regularly.
继续阅读 »

一键安装最新内核并开启 BBR 脚本

最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,最新的 4.11 版内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M
日期  :2017 年 05 月 15 日

关于本脚本

1、本脚本已在Vultr上的 VPS 全部测试通过。
2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。
继续阅读 »

删除git远程分支和tag

在Git v1.7.0 之后,可以使用这种语法删除远程分支:

删除tag这么用:

否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:

这是删除tag的方法,推送一个空tag到远程tag:

两种语法作用完全相同。

最安全的网盘MEGA的加密原理

继BT下载网站海盗湾(Pirate Bay)采取策略将全部服务转至云端之后,天才黑客Kim Dotcom 和他的Megaupload团队也开始发力,加入这场和警方之间的“捉迷藏”中。MPEG 格式文件处理服务提供商Wired近日联系到Dotcom及其商业合作伙伴Mathias Ortmann,双方就如何保存Megaupload的修改版这一问题进行了商谈。洽谈结果是Megaupload将改头换面,变身名为 “Mega”的新服务重出江湖。

这个新服务可以安全躲过政府的突击检查,不会收到侵权起诉。据Wired透露,关键在于所有上传至Mega分享的文件“首 先会在客户的浏览器中被一键加密。这里使用的是一种叫做高级加密标准(AES)的算法。”在此之后,用户会“收到解密密钥。”新的安全性功 能中最重要的一个方面在于它将遵守版权法律的责任放给了每个独立的用户身上,因为“解密密钥不随Mega一起存储”,这样一来,“Mega就无从知道其用 户上传的内容,也无需对此负责。”这项技术同时也能更好的保护用户自己的数据,因为没有解密密钥,盗取信息者就无法读取数据。

Dotcom告知Wired:“哪怕服务器遗失,政府突击数据中心或者有人黑掉了服务器,数据也不会泄露。无论用户上传了什么到网站上,这些东西都会被妥善保管,没有密钥就无法读取。”

继续阅读 »

简单方法解决Vista/Win7/Win10无法接收WM_DROPFILES问题

今天真给这WM_DROPFILES郁闷了下,程序本来运行的好好的,后来改为以管理员身份运行后愣是没反应。没办法,程序必须要有一定的权限才能正常工作,偶菜鸟只能问人找资料了。

在MSDN上翻到了“Understanding and Working in Protected Mode Internet Explorer”,知道了Vista(当然包括Win7)introduced the UIPI which does not allow low right process to send message to the high right processes, 就不让你低权限的给高权限的发消息,~
里面有“Allowing Drag and Drop Operations in your Application”,可是,我按照去做了,往注册表加了那些东西,还是没反应,那个郁闷,囧~
再后来,Google到了CSDN,哈,还是那的答案给我解决了!简单~
加上
ChangeWindowMessageFilter(0x0049, MSGFLT_ADD);
ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
其中#define WM_COPYGLOBALDATA 0x0049,说是DDK里面的头文件有~
继续阅读 »

centos7和centos6的区别

(1)桌面系统
[centos6] GNOME 2.x
[centos7] GNOME 3.x(GNOME Shell)

(2)文件系统
[centos6] ext4
[centos7] xfs

(3)内核版本
[centos6] 2.6.x-x
[centos7] 3.10.x-x

(4)启动加载器
[centos6] GRUB Legacy (+efibootmgr)
[centos7] GRUB2

(5)防火墙
[centos6] iptables
[centos7] firewalld

(6)默认数据库
[centos6] MySQL
[centos7] MariaDB

继续阅读 »

CMAKE 中平台判断

CMAKE 中判断当前操作系统平台:

sqlite之我见–C/C++ API接口示例

在之前的两篇博文中,分别介绍了SQLITE的基础知识和操作,C/C++ 的一些常用API
sqlite之我见–简单介绍与基本操作
sqlite之我见–C/C++ API接口介绍 
本文中,我会给大家用几个小程序示例SQLITE C/C++ API的使用。
1.我们看下最简单的sqlite程序,通过sqlite3_open, sqlite3_exec, sqlite3_close来实现一个简单的数据库操作。

继续阅读 »