数据库中的乐观锁与悲观锁初步

数据库与并发业务

并发业务是一种非常常见且重要的业务场景。比较典型的业务场景是电商业务,尤其是秒杀场景,这里面会涉及到非常多的并发事务,像金融业务等等交易相关的业务也都是如此。这在数据库的应用中称之为TP场景的业务,与AP业务相对应。
当前主流的互联网业务架构大致可以分为三层,第一层是前端层,主要与用户产生交互式关系;第二层可以认为是业务层,所有的业务处理逻辑,诸多if-else判断逻辑等都可以抽象到此类;第三层便是数据持久层,数据持久层即与数据库打交道的一层。对于这种TP业务来讲,对事务的要求非常高,除了数据库能够提供ACID外,还要数据库系统能够保证高并发性能。
通常,在处理数据库并发业务上,我们要通过加锁的方式来保障数据并发修改中的版本一致。通常的方法可以分为乐观锁和悲观锁,下面我们来探讨一下乐观锁和悲观锁这两种锁的类别。

阅读全文

基于Php的webshell自动检测刍议

本文最早发表于乌云知识库中,后来,由于某些原因,乌云知识库无法再访问。重载文章,内容有修改。

0x01 关键词检测

利用正则表达式等对一些常见的 Webshell 关键词进行扫描,从而判断出该文件是否为 Webshell. 这种检测方法非常太暴力了,但是也最为简单可控。显而易见,这样简单粗暴地检测会产生较高的误报率,而且对于一些加了密或者变形的 Webshell 又会出现检测不出来的问题。所以,这样筛选出来的 Webshell 还要经过网络维护人员的手动核实,查杀原则是:宁可错杀一百,不可放过一个。即具有很高的查全率(召回率),但是精准率相对较低。

阅读全文

IO 多路复用的 select, poll, epoll 之间的区别和联系总结

IO 多路复用

select, poll 和 epoll 都是 IO 多路复用的模型,所以在深入了解这三个系统调用之前,需要先简单介绍一下 IO 多路复用。
IO 多路复用是一种复用技术,复用 (multiplexing) 技术很普遍,例如通信中有多路时分复用(OFDM)、频分复用、码分复用。再例如我们一个办公室的人可以共用办公室的一台打印机,大家在不同的时段使用即可实现复用,这就是时分复用。
“IO 多路复用” 是指复用了同一个处理线程(在 Java 中被抽象为选择器 selector),由操作系统进行托管,当与选择器绑定的 socket 满足就绪的条件后,可以直接以事件驱动的形式(即释放 select 调用处的阻塞)获取到该 socket。
对比于同步阻塞 IO:服务端(server)通过监听(listen)绑定的端口,不得不通过 recvfrom 系统调用阻塞在此等待客户端的接入;因此 IO 多路复用比阻塞式 IO 并发处理性能明显提高了许多,因为阻塞式的 IO 不得不处理完该 IO 连接再处理下一个 IO 连接,监听线程无法得到复用。相比于非阻塞 IO,又免去了多次轮训之苦(轮询意味着始终占用 CPU)。各种 IO 模型的对比如图 1.

我们将 5 种不同的 IO 模型简单梳理一下:

阅读全文

no-title

GPU database

// todo

Reference

[1] https://www.heavy.ai/
[2] https://kineticadynamics.com/
[3] The Design and Implementation of CoGaDB: A Column-oriented GPU-accelerated
DBMS. Datenbank-Spektrum 14
[4] GPUQP: Query co-processing using graphics processors. SIGMOD 2007
[5] Ocelot/hype: Optimized data processing on heterogeneous hardware. VLDB 2014
[6] High-throughput transaction executions on graphics processors. PVLDB 2011
[7] GalOP: Towards a GPU-accelerated OLTP DBMS. DAMON@SIGMOD 2021
[8] GaccO - A GPU-accelerated OLTP DBMS. SIGMOD 2022
[9] The Art of Balance: A RateupDBTM Experience of Building a CPU/GPU Hybrid
Database Product. PVLDB 2021
[10] GPU-accelerated data management under the test of time. CIDR 2020

阅读全文

大规模数据处理系统的最新技术与应用 持续更新中

当我们看到这个标题后,不知道大家会先想到什么。我们可能识别到的几个关键字是:架构、大规模、数据处理、最新。那么,实际上我们在这里希望探讨的话题就是最新的数据处理技术,以及这些最新的数据处理技术给实际生产带来的基于与挑战。

从数据处理说起

我首先提出一个命题——“IT 系统最核心的内容便是数据处理”,互联网尤甚。熟悉 Web 架构的读者可以知道,当前互联网架构大致可以拆分为三层:

阅读全文