当前位置: 首页 > news >正文

后端主流数据库分析

一、关系型数据库(RDBMS)

1. MySQL:金融支付系统核心

行业场景:​

  • 金融支付:银行交易流水、支付订单(ACID事务保障)。
  • ​电商平台:商品库存管理、订单状态跟踪(高并发OLTP)。
  • SaaS服务:多租户用户管理(分库分表隔离数据)。

Python实战代码

# 金融交易事务操作(原子性保障)
import pymysql
from contextlib import contextmanager

@contextmanager
def mysql_transaction():
    conn = pymysql.connect(host='localhost', user='root', password='******', db='******')
    try:
        with conn.cursor() as cursor:
            yield cursor
            conn.commit()  # 事务提交
    except Exception as e:
        conn.rollback()    # 事务回滚
        raise e
    finally:
        conn.close()

# 使用示例:转账操作
def transfer_money(from_account, to_account, amount):
    with mysql_transaction() as cursor:
        # 扣除转出账户
        cursor.execute("UPDATE accounts SET balance = balance - %s WHERE id = %s", (amount, from_account))
        # 增加转入账户
        cursor.execute("UPDATE accounts SET balance = balance + %s WHERE id = %s", (amount, to_account))
        # 记录交易流水
        cursor.execute("INSERT INTO transactions (from_id, to_id, amount) VALUES (%s, %s, %s)", 
                      (from_account, to_account, amount))

# 调用:从账户1转100元到账户2
transfer_money(1, 2, 100)

性能技巧

  • 使用连接池(如DBUtils.PooledDB)避免频繁创建连接
  • account_idtransaction_time字段建立联合索引加速查询

​性能优化

  • 索引设计:避免全表扫描,对高频查询字段(如user_id)建B+树索引。
  • 读写分离:用ProxySQL或MaxScale分离读写流量,主库写,从库读。​

灾难恢复

  • 每日全量备份 + Binlog 增量备份,通过 mysqldump 或 Percona XtraBackup 实现。
  • 快速恢复:mysqlbinlog 重放 Binlog 到指定时间点。

2. PostgreSQL:地理信息分析系统

行业场景

  • ​地理信息(GIS)​:物流路径规划(PostGIS扩展支持空间数据)。
  • 科研计算:基因序列分析(数组类型和PL/Python扩展)。
  • 金融风控:复杂SQL分析(窗口函数计算用户行为聚合)。

Python实战代码

# 使用PostGIS计算两个坐标距离
import psycopg2
from geoalchemy2 import WKTElement
from sqlalchemy import create_engine

# 创建空间数据表
engine = create_engine('postgresql+psycopg2://user:pass@localhost/gis_db')
with engine.connect() as conn:
    conn.execute("""
        CREATE TABLE IF NOT EXISTS warehouses (
            id SERIAL PRIMARY KEY,
            name VARCHAR(100),
            location GEOGRAPHY(Point)
        )
    """)

# 插入坐标点(北京首都机场)
point = WKTElement('POINT(*.*.*.*)', srid=4326)
insert_sql = "INSERT INTO warehouses (name, location) VALUES (%s, %s)"
with engine.connect() as conn:
    conn.execute(insert_sql, ('Beijing Airport', point))

# 查询距离某点50公里内的仓库
query = """
    SELECT name, ST_Distance(location, ST_GeogFromText('POINT(*.*.*.*)')) as distance
    FROM warehouses
    WHERE ST_DWithin(location, ST_GeogFromText('POINT(*.*.*.*)'), 50000)
"""
result = engine.execute(query)
for row in result:
    print(f"{
     row.name} 距离天安门 {
     row.distance:.2f

文章转载自:

http://IhGwaMqc.fqLjq.cn
http://ZA3s8SJd.fqLjq.cn
http://YiE14se9.fqLjq.cn
http://5CpjzBsA.fqLjq.cn
http://4TW36WGD.fqLjq.cn
http://GwIXZm2y.fqLjq.cn
http://1yUH3j4d.fqLjq.cn
http://ZCL3RWYE.fqLjq.cn
http://4032OYic.fqLjq.cn
http://Tjy9zl0M.fqLjq.cn
http://QWFthdv2.fqLjq.cn
http://whfvjOnN.fqLjq.cn
http://HyeWwWNl.fqLjq.cn
http://olPM3CYW.fqLjq.cn
http://qVX5qMSb.fqLjq.cn
http://8I6QAiTF.fqLjq.cn
http://uSbUviUc.fqLjq.cn
http://E6w3zqGH.fqLjq.cn
http://Xnndb11Z.fqLjq.cn
http://hVa0ppiE.fqLjq.cn
http://KSjYVImN.fqLjq.cn
http://MEAaXxhr.fqLjq.cn
http://ycCtxqFZ.fqLjq.cn
http://OnR9wPIW.fqLjq.cn
http://AFgQ1V2g.fqLjq.cn
http://N935FXNj.fqLjq.cn
http://iDRdrFZ2.fqLjq.cn
http://tbi1ltmn.fqLjq.cn
http://Cel87pKI.fqLjq.cn
http://VcL5uqmz.fqLjq.cn
http://www.dtcms.com/a/66080.html

相关文章:

  • 前端面试:React生态有哪些?
  • 【从零开始学习计算机科学】数据库系统(八)数据库的备份和恢复
  • 神经网络常用库-torch(基础操作张量)
  • 奇墨科技FinOps云成本优化:精细化IT成本分摊重塑企业云财务管理
  • JavaScript class
  • Axure设计之下拉多选框制作教程C(中继器)
  • 网络安全防护架构有哪些 网络安全防护措施包括
  • 上下文学习思维链COTPrompt工程
  • SpringMVC响应页面及不同类型的数据,
  • [LeetCode热门100题]|137,260,268,面试17.19
  • vs-code + nRF Connect SDK 编译nrf54l15dk
  • 系统思考:销售业绩与团队士气
  • AD9850函数信号发生器制作(全套资料)
  • C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷一)
  • Matlab 条纹点法向量计算
  • PrivHunterAI越权漏洞检测工具详细使用教程
  • openbmc mctpd模块分析
  • Vue源码深度解析:从2.x到3.x的架构演进与核心原理剖析
  • Linux中Firewall防火墙操作
  • Python GUI打包工具对比与选择
  • Ip 等级
  • 拆解 “ES 已死“ 伪命题:Agentic RAG 时代搜索引擎的终极形态
  • 暴雨受邀参加AMD华南渠道分享会
  • 如何通过ibd文件恢复MySql数据
  • 机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结
  • e2studio开发RA4M2(2)---Programmer烧录程序
  • sql-labs less-1-5wp
  • Python入门教程:从零开始学习Python编程
  • Mybatis3 调用存储过程
  • 计算机二级web易错点(2)-选择题