数据库
文章平均质量分 76
mysql、postgresql、mongodb、redis、Elasticsearch、clickhouse
西京刀客
AI,Crypto/Web3.
A bug bounty hunting and a lot of coding is my passion!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据库的三级模式:外模式 、逻辑模式、内模式(三级模式 与 MySQL 的对应关系)
数据库三级模式结构是ANSI/SPARC提出的标准体系,包括外模式(用户视图)、概念模式(全局逻辑结构)和内模式(物理存储)。外模式描述局部数据逻辑结构,概念模式定义全体数据关系,内模式管理物理存储方式。MySQL通过视图、表结构和存储引擎分别实现三级模式,并通过两层映射提供数据独立性。但在实际开发中,VIEW使用较少,因其存在性能、维护和功能限制等问题,现代应用更多通过ORM、Service层等方式替代VIEW功能。三级模式作为理论框架,在实际数据库系统中通常被透明化实现。原创 2026-02-08 16:27:23 · 1231 阅读 · 0 评论 -
MySQL字符集排序规则冲突问题(utf8mb4_unicode_ci和utf8mb4_0900_ai_ci )
MySQL字符集排序规则冲突常见于不同collation表JOIN操作时报错。文章分析了utf8mb4_unicode_ci(基于早期UCA)和utf8mb4_0900_ai_ci(基于UCA 9.0.0)两种排序规则的特点,后者是MySQL 8.0的默认规则。建议新项目优先使用utf8mb4_0900_ai_ci以获得更现代的Unicode支持,老系统可保持utf8mb4_unicode_ci以保证兼容性。生产环境应统一使用数据库默认collation,创建表时需注意是否显式指定排序规则,建议先通过SHO原创 2026-01-28 10:15:17 · 1245 阅读 · 0 评论 -
go语言-切片排序之sort.Slice 和 sort.SliceStable 的区别(数据库分页、内存分页场景注意点)
Go语言中sort.Slice和sort.SliceStable的主要区别在于排序稳定性。sort.Slice采用快速排序算法,性能更快但不保证相等元素的原始顺序;而sort.SliceStable使用归并排序,保持相等元素的相对顺序但性能稍慢。在需要分页或多级排序时应使用sort.SliceStable,并配合辅助排序字段确保确定性顺序。数据库排序也存在类似问题,仅靠单字段排序无法保证相同值记录的稳定顺序,必须添加唯一字段作为辅助排序条件才能实现跨请求的稳定分页。原创 2025-12-20 11:22:15 · 1231 阅读 · 0 评论 -
FULL OUTER JOIN 和 LEFT JOIN 的区别 | 使用 UNION ALL 替代 FULL OUTER JOIN 有什么好处
本文介绍了四种SQL连接类型:INNER JOIN(只返回两表匹配记录)、LEFT JOIN(返回左表全部+右表匹配)、RIGHT JOIN(返回右表全部+左表匹配)和FULL OUTER JOIN(返回两表全部记录)。通过手动编码和AI生成数据两个表的示例演示了不同连接的效果,重点说明了LEFT JOIN和FULL OUTER JOIN的区别。特别指出FULL OUTER JOIN中COALESCE函数可能导致时间信息缺失的问题,并提出了使用日期维度表+LEFT JOIN的解决方案。原创 2025-10-30 08:57:50 · 448 阅读 · 0 评论 -
何时在 ClickHouse 中使用 ARRAY JOIN
ARRAY JOIN 子句. 对于包含数组列的表,将初始列的每个单独数组元素生成一行的新表是一个常见操作,同时其他列的值会被重复。原创 2025-10-25 15:37:44 · 270 阅读 · 0 评论 -
clickhouse副本只有一个节点有数据原因
ClickHouse单分片三副本集群数据同步问题排查 当ClickHouse集群出现单分片三副本中仅一个节点有数据时,主要排查方向包括: 确认使用ReplicatedMergeTree引擎(只有该引擎支持副本) 检查各副本表结构一致性 排查数据导入时机(普通表转复制表时数据不会自动同步) 通过system.replicas表检查副本状态、队列情况 验证ZooKeeper连接是否正常 关键特征:ReplicatedMergeTree采用多主架构,依赖ZooKeeper实现写入同步,但查询时不依赖;数据以Blo原创 2025-10-22 09:37:24 · 368 阅读 · 0 评论 -
什么是 Apache Parquet?ClickHouse 与 Parquet 的交互方式/安装 clickhouse-client
Parquet 是一种开源的列式存储格式,专为大数据处理和分析任务设计。它是由Apache软件基金会开发的,并且是Hadoop生态系统的一部分。自2013年首次引入以来,Apache Parquet作为一种免费和开放源代码的存储格式被广泛采用。原创 2025-10-09 21:28:40 · 336 阅读 · 0 评论 -
clickhouse 中SUM(CASE WHEN ...) 返回什么类型?
摘要:ClickHouse中SUM(CASE WHEN...)的返回类型具有不确定性,默认使用最小整数类型存储结果。当数据量较小时可能返回UInt8,大量数据时可能返回UInt32/UInt64。为避免溢出风险,建议通过toUInt64()显式转换或使用类型提升(如乘以1)。在Go语言应用中,推荐在SQL查询中使用toUInt64转换,并在接收结构体中声明为uint64类型,确保数据安全处理。该函数对不符合条件的记录返回0,符合条件则返回数值总和。原创 2025-09-15 23:28:52 · 572 阅读 · 0 评论 -
clickhouse的UInt64类型(countIf() 函数返回)
摘要:本文介绍了ClickHouse中的countIf()聚合函数,用于条件计数,并探讨其与Go语言的类型对应关系。countIf()统计满足条件的行数,返回UInt64类型。在Go中可使用uint64直接对应,或使用sql.NullInt64处理NULL值。建议使用clickhouse-go/v2驱动,保持类型一致性,避免不必要转换,提高代码可读性和性能。文中提供了Go语言操作ClickHouse的示例代码。原创 2025-09-12 22:32:55 · 615 阅读 · 0 评论 -
ClickHouse 客户端
ClickHouse客户端摘要 ClickHouse提供HTTP和TCP两种客户端协议。HTTP接口支持轻量级操作,通过curl可测试连通性(8123/ping返回"Ok")及副本状态检查。TCP协议主要用于clickhouse-client命令行工具,连接后显示版本和数据库信息,支持quit/exit退出。两种方式分别适用于不同场景,具体参数可参考官方文档。原创 2025-08-29 21:47:41 · 627 阅读 · 0 评论 -
开源列式分布式数据库clickhouse
ClickHouse 是一个开源列式数据库管理系统,专为在线分析处理(OLAP)而设计。它能够快速执行高并发、高效的数据查询,适合用于处理大量数据。原创 2025-08-02 21:26:01 · 1372 阅读 · 0 评论 -
软删除设计:为什么使用 deleted_at = ‘1970-01-01 00:00:00‘ 表示未删除?
在现代数据库设计中,尤其是在处理用户数据、审计追踪和合规要求的应用中,软删除 已成为硬删除的标准替代方案。软删除是通过标记记录为已删除而不实际从数据库中移除它们。这种方法保留了数据以供潜在恢复、历史分析或监管用途。原创 2025-07-18 07:54:01 · 1256 阅读 · 0 评论 -
mysql之timestamp字段自动更新问题
MySQL的TIMESTAMP字段具有自动更新特性,当修改记录时该字段会自动更新为当前时间。这一行为由explicit_defaults_for_timestamp参数控制,适合记录最后修改时间。相比之下,DATETIME类型不会自动更新,更适合记录创建时间。最佳实践建议每个表同时包含TIMESTAMP(自动更新)和DATETIME(记录创建时间)字段。TIMESTAMP存储时会转换为UTC时间,查询时按连接时区转换,范围从1970到2038年。如需禁用自动更新功能,可将字段类型改为DATETIME。原创 2025-06-26 22:26:56 · 614 阅读 · 0 评论 -
PostgreSQL如何设置主键自增(序列、SERIAL)
在使用Mysql时,创建表结构时可以通过关键字auto_increment来指定主键是否自增。但在Postgresql数据库中,虽然可以实现字段的自增,但从本质上来说却并不支持Mysql那样的自增。原创 2024-08-26 17:11:22 · 11527 阅读 · 0 评论 -
spring boot-引入Redis并封装redistemplate操作工具类
springboot引入Redis及其使用案例原创 2024-03-28 13:04:20 · 2647 阅读 · 1 评论 -
sql常用之CASE WHEN THEN
SQL中的 CASE 类似编程语言里的 if-then-else 语句,用做逻辑判断。可以用于SELECT语句中,也可以用在WHERE,GROUP BY 和 ORDER BY 子句;可以单独使用,也可以和聚合函数结合使用。原创 2024-03-27 15:54:48 · 1597 阅读 · 0 评论 -
golang常用库之-操作sqlite数据库
SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,比如 MySQL、PostgreSQL 等,SQLite 不需要在系统中设置和管理一个单独的服务。这也使得 SQLite 是一种非常轻量级的数据库解决方案,非常适合小型项目、嵌入式数据库或者测试环境中。原创 2023-12-01 21:26:22 · 3972 阅读 · 2 评论 -
redis list 设置队列大小
Redis列表类型的最大长度(maxlen)功能直到版本6.2才被引入,它可以用于为列表设置最大长度,实现有限大小的队列。原创 2023-05-18 22:36:15 · 5397 阅读 · 2 评论 -
Redis的key和value大小限制 | value需要压缩吗?
Redis的key和value大小限制原创 2022-10-14 21:02:14 · 10235 阅读 · 0 评论 -
mongodb数据模型设计
内嵌是monodb建模的主要手段!一般建议的是先考虑内嵌, 直接按照你的对象模型来设计你的数据模型。如果你的对象模型数量不多,关系不是很复杂,那么恭喜你,可能直接一种对象对应一个集合就可以了。原创 2022-10-01 17:48:26 · 4136 阅读 · 0 评论 -
Redis 消息队列的三种方案选型
Redis是目前最受欢迎的kv类数据库,当然它的功能越来越多,早已不限定在kv场景,消息队列就是Redis中一个重要的功能。原创 2022-10-02 18:40:25 · 2072 阅读 · 0 评论 -
mongodb固定集合(Capped Collections) | MongoDB 自动删除集合中过期的数据——TTL索引
固定集合是具**有固定大小**的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。TTL 索引是特殊的单字段索引,MongoDB 可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。原创 2022-09-29 00:45:00 · 1050 阅读 · 0 评论 -
DB-Engines 数据库排行榜、MongoDB安装、MongoDB的客户端管理工具
DB-Engines 数据库排行榜、MongoDB安装、MongoDB的客户端管理工具原创 2022-09-15 23:45:00 · 1340 阅读 · 0 评论 -
windows下安装Elasticsearch(es)、 Elasticsearch可视化工具选型/对比
Elasticsearch 是一个非常强大的搜索引擎。它目前被广泛地使用于各个 IT 公司。Elasticsearch 是由 Elastic 公司创建。它的代码位于 GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine。目前,Elasticsearch 是一个免费及开放(free and open)的项目。同时,Elastic 公司也拥有 Logstash 及 Kibana 开源项目。.......原创 2022-08-02 09:28:09 · 2608 阅读 · 0 评论 -
数据库性能测试(mysql)
常见的数据库指标包括TPS/QPS:衡量吞吐量。(TPS:每秒事务处理量(TransactionPerSecond)、每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准)响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。并发量:同时处理的查询请求的数量。...原创 2022-07-25 22:19:17 · 5927 阅读 · 0 评论 -
MySQL InnoDB 存储引擎写入磁盘(落盘)的原理\MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)\隔离性
文章目录一、MySQL InnoDB 存储引擎写入磁盘(落盘)的原理一条 update 语句在写入磁盘的过程为什么必须有“两阶段提交”呢?binlog 的写入机制二、MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)redo log(重做日志) 如何保证事务的持久性?undo log(回滚日志) 如何来保证事务的原子性?mysql 命令行开启事务提交设置手动提交事务三、隔离性锁机制MVCC(Multi-Version Concurrency Control) 多版本并发控制事务隔离原创 2022-03-03 20:14:11 · 5116 阅读 · 2 评论 -
linux安装和配置 MariaDB (ubuntu20.04)
linux安装和配置 MariaDB (ubuntu20.04)为什么选择 MariaDB,而不是 MySQL 呢?选择 MariaDB 一方面是因为它是发展最快的 MySQL 分支,相比 MySQL,它加入了很多新的特性,并且它能够完全兼容 MySQL,包括 API 和命令行。另一方面是因为 MariaDB 是开源的,而且迭代速度很快。ubuntu20.04 安装和配置 MariaDB...原创 2022-01-16 16:37:05 · 6406 阅读 · 0 评论 -
mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:
mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:问题背景:当你使用 @的密码登录mongodb报错FailedToParse: Password must be URL Encoded for mongodb:// URL:问题分析:官方:https://docs.mongodb.com/manual/reference/connection-string/#examplesIf the userna原创 2022-01-09 14:39:51 · 1537 阅读 · 0 评论 -
数据库连接工具-DataGrip 使用总结
DataGrip 连接mysqlDataGrip 2019.1 连接mysql 8.0.16参考URL: https://www.cnblogs.com/linkenpark/p/10908101.htmlmysql时区错误及解决办法参考URL: https://www.jianshu.com/p/0d53218da27d有两点需要注意:默认下载mysql驱动比较慢,可以采用参考博...原创 2021-11-18 16:40:50 · 18389 阅读 · 0 评论 -
postgresql数据库工作常用命令-(数据库性能检查相关命令) -TODO
文章目录一、postgresql数据库工作常用命令1. 数据库性能检查相关命令一、postgresql数据库工作常用命令查看当前都有什么数据库\l\c + 数据库名 来进入数据库:\c mydbupdate tablename set columname=0; --设初始值为零update t_account set password = 'xxx';1. 数据库性能检查相关命令查询所有数据库大小select datname, pg_size_pretty (pg_datab原创 2021-08-20 09:47:28 · 3308 阅读 · 0 评论 -
Django setting.py设置时区
Django setting.py设置时区在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即America/Chicago,此时的TIME_ZONE不管有没有设置都不起作用。如果USE_TZ 设置为False,而TIME_ZONE设置为None,则Django还是会使用默认的America/Chicago时间。若TIME_ZONE设置为其它时区的话,原创 2021-08-03 20:16:54 · 2200 阅读 · 0 评论 -
postgresql时区
postgresql时区pg上查询:select now();show time zone; 查看数据库可供选择的时区:select * from pg_timezone_names;设置时区set time zone "Asia/Shanghai";但是通过这种方式设置时区在你退出psql终端后,再次进入此psql中断后就会发现又恢复到原来的时区了,如果想永久修改,我们需要更改配置文件:root@sheservice:~# find / -name postgresql.conf原创 2021-08-03 20:11:05 · 6368 阅读 · 0 评论 -
PostgreSQL 修改数据库用户的密码
PostgreSQL 修改数据库用户的密码su - postgrespgsqlselect usename,passwd from pg_shadow;ALTER USER my_xxx with password ‘xxx’;原创 2021-06-19 17:42:11 · 9577 阅读 · 3 评论 -
PostgreSQL(Pgsql)快速开始/ ubuntu、centos下PostgreSQL数据库安装配置/查看已经编译的pg 编译选项
PostgreSQL支持JSON和其他NoSQL功能,本机支持XML,允许索引JSON数据,MySQL支持JSON,不过不支持其他的NoSQL功能。只有社区版,没有其他任何分支版本,PGSQL官方统一开发,统一维护,社区版有所有功能,不像SQL Server和MySQL有标准版、企业版、经典版、社区版、开发版、web版之分。物理流复制,属于物理复制,跟SQL Server镜像/AlwaysOn一样,严格一致,没有任何可能导致不一致,性能和可靠性上,物理复制完胜逻辑复制,维护简单。原创 2021-01-04 17:03:16 · 20377 阅读 · 0 评论 -
postgresql 开启远程访问、postgre设置开机自启动、psql: error: FATAL: Peer authentication failed for user “postgres“
文章目录psql: error: FATAL: Peer authentication failed for user "postgres"postgresql 开启远程访问认证方式postgre设置开机自启动psql: error: FATAL: Peer authentication failed for user “postgres”背景:执行 psql -U postgres报错 psql: error: FATAL: Peer authentication failed for us原创 2021-06-19 16:00:42 · 5208 阅读 · 1 评论 -
postgresql 中的\x命令
psql中的\x命令这个\x命令的含义是:psql客户端每行仅仅显示一个字段以及该字段值.关闭\x效果的命令是:postgres=# \x offExpanded display is off. 或者postgres=# \x --->>>也就是这个\x是开关键Expanded display is off.postgres=#...原创 2021-06-08 16:33:03 · 1418 阅读 · 1 评论 -
mysql安装以及常用命令(Win10、Llinux、macos安装MySQL、linux mysql 忘记密码修改密码)
myslq安装以及常用命令原创 2020-05-25 12:40:58 · 708 阅读 · 0 评论 -
MySQL sql优化参考总结
SQL优化参考1. 阿里「超过三张表禁止join」作为强制规定,实际是硬性杜绝了开发者和设计者为了省事而将复杂的关联关系写在SQL语句中的行为。迫使人使用程序代码代替SQL语句来处理问题。分析:减少join除了直观地降低了高并发状态下的资源消耗外,更大的好处是降低了业务之间的耦合,增加了扩展性。这些规则都是互联网开发团队总结出来的,适用于高并发、轻写重读、分布式、业务逻辑简单的情况...原创 2018-10-12 10:58:05 · 1238 阅读 · 0 评论
分享