如何加快 sort 的排序速度

GNU sort 工具是我们经常用来对文本文件进行排序或去重的工具。sort 默认的参数可能并不适合排序上 G 的大文件。我们来看一下经常被忽略的 GNU sort 单文件排序优化策略。

例如,我们有一个 100G 的 data.csv 文件,要按第一列的编号排序。命令如下:

env LC_ALL=C sort -S 60% -k 1n,1n -t, --parallel=4 --compress-program=pzstd -o data_sorted.csv data.csv

其中:

  • env LC_ALL=C 指定 sort 按照字节排序,无视内容的语言和编码。在不同的语言环境下,sort 会根据该语言的特点进行字典序的比较 …

SQLite 扩展应用

SQLite 根据作者的说法,它不是要跟 PostgreSQL/Oracle/MSSQL/MySQL 比,而是要取代 fopen(),让应用开发者不用自己考虑文件格式的解析和序列化。我们来看看 SQLite 中比较少注意到的功能。

PRAGMA

  • PRAGMA journal_mode=WAL。本地数据库可以用 WAL 模式加快读写速度,减少多进程冲突。
  • PRAGMA cache_size=-kibibytes,加大你的缓存。
  • PRAGMA application_idPRAGMA user_version,让程序给自己的数据库标上识别码和版本号。

权限机制

SQLite 有一个很简单的权限系统,能对 SQL 虚拟机的操作指令设置回调 [1],来判断是否允许操作。拿 Python 举例 [2],例如我们要仅允许只读操作。

import sqlite3

SQLITE_FUNCTION = 31

def …

CSV 转 SQL:又一个轮子

这种轮子多了去了。这次的轮子功能有:

  • 自动判别类型。你数据里有 NULL 值,某列前几行都是数字后面出现文本,严格区分大小整数和浮点数,这些我们都考虑了。
  • 生成 CREATE TABLE。不对自己改。
  • 非标准 CSV。这种文件太多了,得给每种格式来个选项。
  • 几何类型。识别 Well Known Text,通用的地理图形记法。
  • 没有外部依赖。为啥识别个数字类型还要装 Pandas?

https://github.com/The-Orizon/nlputils/blob/master/csvsql.py

为什么不用 LaTeX

8102 年了,为什么还要用 LaTeX 呢?LaTeX 没有:

  • 良好的设计。混乱的宏定义名称、包名称、语法,读不懂的错误信息。你猜不出你要用的命令到底叫什么、在哪个包,也没有命名空间的约定。
  • 文档。它唯一的官方文档是一本书,没有电子版,也没有多少能用的索引,有些命令还没有提到。常见问题分散在各大论坛、问答网站,而不是加进官方文档。每个包的文档不统一,还得用难用的 PDF 搜索功能。
  • 更新。没有新增和删减功能,都是靠包来凑。
  • 国际化支持。别跟我说 Xe/Lua/PdfLaTeX 之类的扩展实现,LaTeX 设计上就是没有的,也常常会遇到外部扩展不支持国际化的问题。它是在 Unicode 标准建立之前设计的,却从来没有官方更新支持国际化和 Unicode。除了拉丁文字,其他文字的特有排版样式,像是中文竖排,也是没有的。
  • 排版样式。你就只见到过那几种排版 …