4. 数据库环境配置

在智能寻源算法中,数据库承担着品类策略元数据、供应商画像、历史寻源记录以及实时缓存数据的存储与查询任务。本章节将详细阐述关系型数据库(PostgreSQL / MySQL)与 NoSQL 数据库(Redis / MongoDB)的安装初始化、连接池配置及 ORM 集成方案,确保算法环境具备高可用、低延迟的数据访问能力。

4.1 关系型数据库安装与初始化

关系型数据库用于存储结构化数据,如品类树、供应商资质、价格区间等。推荐使用 PostgreSQL 15+ 或 MySQL 8.0+,两者均支持 JSON 字段与事务隔离,适合寻源算法的复杂查询。

4.1.1 PostgreSQL 安装与初始化

安装步骤(Ubuntu 22.04 示例):
# 更新包索引并安装 PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib -y

# 启动服务并设置开机自启
sudo systemctl start postgresql
sudo systemctl enable postgresql

# 切换到 postgres 用户,创建寻源数据库与专用用户
sudo -u postgres psql -c "CREATE USER sourcing_user WITH PASSWORD 'Sourcing@2025';"
sudo -u postgres psql -c "CREATE DATABASE sourcing_db OWNER sourcing_user;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sourcing_db TO sourcing_user;"

4.1.2 MySQL 安装与初始化

安装步骤(Ubuntu 22.04 示例):
# 安装 MySQL 8.0
sudo apt update
sudo apt install mysql-server -y

# 安全配置(设置 root 密码、移除匿名用户等)
sudo mysql_secure_installation

# 登录 MySQL 并创建数据库与用户
sudo mysql -u root -p
CREATE DATABASE sourcing_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'sourcing_user'@'%' IDENTIFIED BY 'Sourcing@2025';
GRANT ALL PRIVILEGES ON sourcing_db.* TO 'sourcing_user'@'%';
FLUSH PRIVILEGES;
EXIT;

4.1.3 关系型数据库对比

特性 PostgreSQL MySQL
JSON 支持 原生 JSONB,支持索引与 GIN 加速 JSON 类型,支持索引但功能较弱
全文检索 内置 tsvector/tsquery,性能优秀 需 InnoDB 全文索引,中文需插件
并发控制 MVCC,支持可序列化快照隔离 MVCC,默认可重复读
GIS 扩展 PostGIS 成熟生态 MySQL Spatial 扩展有限
推荐场景 复杂查询、地理空间、JSON 分析 高并发读、简单事务、生态兼容
选型建议: 若寻源算法涉及品类地理分布(如供应商区域聚类),优先选择 PostgreSQL + PostGIS;若主要处理高并发品类查询且团队熟悉 MySQL,则选择 MySQL 8.0。

4.2 NoSQL 数据库配置

NoSQL 数据库在智能寻源中承担缓存加速与文档存储角色:Redis 用于品类策略缓存、实时竞价状态;MongoDB 用于存储非结构化的供应商文档、寻源日志与品类策略快照。

4.2.1 Redis 配置

安装与基础配置(Ubuntu 22.04):
# 安装 Redis 7.x
sudo apt update
sudo apt install redis-server -y

# 编辑配置文件 /etc/redis/redis.conf
# 关键参数调整:
# bind 127.0.0.1 -::1        # 仅本地访问,生产环境需绑定内网 IP
# requirepass Redis@2025      # 设置访问密码
# maxmemory 2gb               # 限制最大内存
# maxmemory-policy allkeys-lru # 淘汰策略

# 重启服务
sudo systemctl restart redis-server
sudo systemctl enable redis-server

# 验证连接
redis-cli -a Redis@2025 ping
# 返回 PONG 表示成功

4.2.2 MongoDB 配置

安装与初始化(Ubuntu 22.04):
# 导入 MongoDB 7.0 官方 GPG 密钥并添加源
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

sudo apt update
sudo apt install mongodb-org -y

# 启动 MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod

# 创建管理员用户与寻源数据库
mongosh
use admin
db.createUser({ user: "admin", pwd: "Admin@2025", roles: ["root"] })
use sourcing_db
db.createUser({ user: "sourcing_user", pwd: "Sourcing@2025", roles: ["readWrite"] })
exit

4.2.3 NoSQL 数据库对比

特性 Redis MongoDB
数据模型 Key-Value,支持 List/Set/Sorted Set/Hash 文档型(BSON),支持嵌套与数组
持久化 RDB 快照 + AOF 日志 WiredTiger 存储引擎,支持副本集
查询能力 基于 Key,支持简单模式匹配 丰富查询、聚合管道、地理空间
典型用途 品类策略缓存、分布式锁、实时计数器 供应商文档、寻源日志、策略快照
高可用 Redis Sentinel / Cluster 副本集 + 分片集群

4.3 数据库连接池与 ORM 配置

连接池管理数据库连接的复用与生命周期,避免频繁创建/销毁连接带来的性能开销。ORM(对象关系映射)将数据库表映射为编程语言对象,提升开发效率。以下以 Python 生态为例,展示连接池与 ORM 的典型配置。

4.3.1 连接池配置

PostgreSQL 连接池(psycopg2 + SQLAlchemy):
from sqlalchemy import create_engine

# PostgreSQL 连接池配置
DATABASE_URL = "postgresql://sourcing_user:Sourcing@2025@localhost:5432/sourcing_db"
engine = create_engine(
    DATABASE_URL,
    pool_size=10,           # 连接池大小
    max_overflow=20,        # 最大溢出连接数
    pool_pre_ping=True,     # 连接前检查有效性
    pool_recycle=3600       # 连接回收时间(秒)
)
Redis 连接池(redis-py):
import redis

# Redis 连接池配置
pool = redis.ConnectionPool(
    host='localhost',
    port=6379,
    password='Redis@2025',
    db=0,
    max_connections=50,     # 最大连接数
    socket_timeout=5,       # 套接字超时(秒)
    socket_connect_timeout=3
)
r = redis.Redis(connection_pool=pool)

4.3.2 ORM 配置

SQLAlchemy ORM 模型示例(品类表):
from sqlalchemy import Column, Integer, String, Float, DateTime
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime

Base = declarative_base()

class Category(Base):
    __tablename__ = 'categories'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(100), nullable=False, index=True)
    parent_id = Column(Integer, nullable=True)
    level = Column(Integer, default=1)
    strategy_type = Column(String(50), default='standard')
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

    def __repr__(self):
        return f"<Category(id={self.id}, name='{self.name}', level={self.level})>"
MongoEngine ORM 模型示例(供应商文档):
from mongoengine import Document, StringField, ListField, FloatField, DateTimeField
from datetime import datetime

class Supplier(Document):
    meta = {'collection': 'suppliers'}

    name = StringField(required=True, max_length=200)
    region = StringField(max_length=100)
    categories = ListField(StringField())
    rating = FloatField(min_value=0, max_value=5, default=0)
    created_at = DateTimeField(default=datetime.utcnow)
    updated_at = DateTimeField(default=datetime.utcnow)

    def to_dict(self):
        return {
            "id": str(self.id),
            "name": self.name,
            "region": self.region,
            "categories": self.categories,
            "rating": self.rating
        }

4.4 数据库环境架构总览

下图展示了智能寻源算法中数据库环境的整体架构,包括关系型数据库、NoSQL 数据库、连接池与 ORM 层的协作关系。

数据库环境架构总览 智能寻源算法应用 ORM 层 (SQLAlchemy / MongoEngine) 连接池 (Connection Pool) PostgreSQL 品类树 / 供应商资质 / 价格区间 MySQL 高并发品类查询 / 事务日志 Redis 品类策略缓存 / 实时竞价状态 MongoDB 供应商文档 / 寻源日志 / 策略快照 说明:连接池管理所有数据库连接的复用与健康检查;ORM 层提供对象化操作接口,屏蔽底层 SQL 差异。

4.5 配置验证与测试

完成安装与配置后,需执行以下验证步骤确保数据库环境可用:

  1. 连接测试: 使用命令行客户端或编程语言驱动尝试连接各数据库,确认用户名、密码、端口正确。
  2. 连接池压力测试: 模拟并发请求,观察连接池是否按配置创建/回收连接,无泄漏或超时。
  3. ORM 模型同步: 执行 Base.metadata.create_all(engine) 或 Supplier.ensure_indexes(),确认表/集合创建成功。
  4. 读写分离验证: 若配置了主从或副本集,验证写操作路由到主节点,读操作可分发到从节点。
常见问题:
  • 连接池耗尽:检查 pool_size 与 max_overflow 是否匹配并发峰值,必要时增加连接数或优化查询。
  • ORM 模型字段变更未同步:使用迁移工具(Alembic / Mongomigrate)管理 schema 版本,避免手动修改数据库。
  • Redis 内存溢出:配置 maxmemory 与合理的淘汰策略(如 allkeys-lru),并监控内存使用率。

通过以上配置与验证,智能寻源算法将获得稳定、高效的数据库支撑,为后续品类策略计算与寻源匹配奠定坚实基础。