SQL的N+1问题与sqlite
SQLite 与 N+1 问题
什么是 N+1 问题?
N+1 问题通常发生在当你需要从数据库中获取关联数据时. 假设需要获取一个作者列表以及每位作者的文章列表. 如果先执行一个查询获取所有作者(N), 然后对于每个作者, 再执行一个单独的查询来获取他们的文章(+1), 那么就会产生N+1问题.
进入阅读→SQLite 数据库备份全攻略
数据备份的重要性不言而喻. 对于轻量级数据库 SQLite 来说, 备份操作更是至关重要. 本文将深入探讨 SQLite 数据库的多种备份方法, 并分析它们的优缺点.
SQLite 的魅力之一在于其数据存储在一个单一文件中. 在理想情况下, 可以直接复制该文件进行备份. 然而, 现实情况往往更加复杂. 本文逐一了解各种备份方法, 并提供清晰的代码示例.
在开始之前, 先使用 time 命令来衡量各种备份操作的耗时, 以便更直观地比较它们的效率. (注: 以下所有命令示例均以 time 命令开头, 用于记录执行时间.)
SQLite的窗口函数
你是否还在用传统的 GROUP BY 进行复杂的数据分析? 是时候认识一下 SQL 窗口函数 (Window Functions) 了! 窗口函数是一种强大的 SQL 功能, 它能让你在不减少行数的情况下, 对数据集的窗口(一组相关的行)执行计算, 极大地提升数据分析的灵活性和效率.
窗口函数的基本概念
窗口函数的语法结构如下:
进入阅读→使用SQLiteFTS5扩展实现全文检索
本文将介绍如何使用 SQLite 的 FTS5 (Full-Text Search 5) 扩展, 为您的电影评论应用添加高效的电影标题搜索功能. 如果您正在使用 SQLite 并且需要实现全文搜索, 那么 FTS5 绝对是您的理想选择.
使用 LIKE 运算符的性能问题
假设您已经有了一个电影数据库, 并且想要根据电影标题进行搜索. 最先想到的方法可能是使用 SQL 的 LIKE 运算符. 例如, 您可以使用以下查询来查找标题包含 "Star Wars" 的电影:
SQLite 数据类型
SQLite 在数据类型上显得格外特立独行.
先来看一个创建表的 SQL 语句:
CREATE TABLE contacts (
name TEXT,
age INTEGER
);
进入阅读→
homebrew的原理以及使用
Homebrew由开发者 Max Howell开发开源包管理工具,是当前(2022年)osx上最方便的包管理器工具。
Homebrew 早期仅有macOS版本,现在也可以进行Linux包管理.
可以一键安装开源免费的命令行以及图形界面应用. 使用体验接近apt, yum之类的Linux包管理工具.
进入阅读→nginx+RMTP配置直播推拉流服务实践
此方案比较成熟,但是新手未必能一步到位,作为实践记录保存
基础服务
- 安装nginx(下面是包管理器安装,比较推荐源码安装)
Emacs的使用程度

试用
知道有Emacs这么个东西, 下载试用下下, 学会了 C-x C-c 可以退出Emacs,
C-h t 可以进入教程, 像试用简单的文本编辑器一样用鼠标和键盘编辑文件.
避免在sqlite项目中使用连接池
使用luminus项目模版创建的项目中, 默认都是使用HikariCP来创建一个有10个connection的连接池.
这在其他类型的数据库上很合理, 在sqlite上却有些多余, 而且数据库有长时间闲置连接回收创建的机制, 在挂载多数据库的时候需要反复检查挂载.
如果漏掉就会抛出异常.
进入阅读→re-frame,reitit-frontend路由里传参
背景
最近的项目都用kee-frame,在controller中处理访问时url里的参数,大致会是下面这个样子,
(require '[kee-frame.core :as kf])
(kf/reg-controller
:broadcast/room-detail-controller
{:params (fn [route]
(let [path (get-in route [:path-params :path])
query (get route :query-string)]
(when (and (= path "/broadcast/room-detail") (re-find #"id=\w+" (or query "")))
(second (string/split query "=")))))
:start (fn [_ id]
[:broadcast/broadcast-detail-ajax id])
:stop (fn []
[::reset])})
进入阅读→