3.2 关系型数据库实现 — Agent记忆系统设计 本节导读:深入学习关系型数据库在记忆系统中的具体实现,包括表结构设计、性能优化和数据操作,为记忆系统提供可靠的数据存储基础。 学习目标 掌握记忆系统的数据库表设计方法 理解关系型数据库的性能优化策略 学会实现高效的CRUD操作 掌握数据一致性和事务处理机制 核心概念 关系型数据库是记忆系统架构中最基础也是最重要的组成部分,负责存储结构化的数据,提供ACID特性保证数据的一致性和完整性。MySQL凭借其成熟稳定、性能优秀和社区支持丰富的特点,成为记忆系统关系数据存储的首选选择。 关系型数据库在记忆系统中的位置和作用:连接应用层与其他数据库层 环境准备 / 前置知识 MySQL 8.
本节导读:深入学习关系型数据库在记忆系统中的具体实现,包括表结构设计、性能优化和数据操作,为记忆系统提供可靠的数据存储基础。
关系型数据库是记忆系统架构中最基础也是最重要的组成部分,负责存储结构化的数据,提供ACID特性保证数据的一致性和完整性。MySQL凭借其成熟稳定、性能优秀和社区支持丰富的特点,成为记忆系统关系数据存储的首选选择。
首先设计记忆系统的核心表结构,涵盖记忆条目、标签、访问记录等关键数据。
# 记忆系统数据库表结构设计 import mysql.connector from mysql.connector import Error import uuid from datetime import datetime import json class MemoryDatabaseSchema: def __init__(self, config): self.config = config self.connection = None def connect(self): """建立数据库连接""" try: self.connection = mysql.connector.connect(**self.config) print("数据库连接成功") return True except Error as e: print(f"数据库连接失败: {e}") return False def create_database(self): """创建数据库""" if not self.connection: self.connect() try: cursor = self.connection.cursor() # 创建记忆系统数据库 create_db_query = """ CREATE DATABASE IF NOT EXISTS memory_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; """ cursor.execute(create_db_query) # 使用数据库 use_db_query = "USE memory_system;" cursor.execute(use_db_query) print("数据库创建成功") return True except Error as e: print(f"数据库创建失败: {e}") return False finally: if cursor: cursor.close() def create_memory_items_table(self): """创建记忆条目主表""" create_query = """ CREATE TABLE IF NOT EXISTS memory_items ( id VARCHAR(36) PRIMARY KEY, type ENUM('fact', 'procedure', 'contextual', 'emotional') NOT NULL, category VARCHAR(50) NOT NULL, title VARCHAR(200) NOT NULL, content TEXT NOT NULL, content_type VARCHAR(50) NOT NULL, metadata JSON, access_count INT DEFAULT 0, last_accessed TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, version INT DEFAULT 1, is_active BOOLEAN DEFAULT TRUE, importance DECIMAL(3,2) DEFAULT 0.5, expiry_time TIMESTAMP NULL, INDEX idx_type_category (type, category), INDEX idx_created_at (created_at), INDEX idx_importance (importance), INDEX idx_expiry_time (expiry_time) ) ENGINE=InnoDB; """ self._execute_query(create_query) def create_memory_tags_table(self): """创建记忆标签表""" create_query = """ CREATE TABLE IF NOT EXISTS memory_tags ( id VARCHAR(36) PRIMARY KEY, memory_id VARCHAR(36) NOT NULL, tag VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (memory_id) REFERENCES memory_items(id) ON DELETE CASCADE, INDEX idx_memory_id (memory_id), INDEX idx_tag (tag), UNIQUE KEY unique_memory_tag (memory_id, tag) ) ENGINE=InnoDB; """ self._execute_query(create_query) def create_memory_access_logs_table(self): """创建记忆访问日志表""" create_query = """ CREATE TABLE IF NOT EXISTS memory_access_logs ( id VARCHAR(36) PRIMARY KEY, memory_id VARCHAR(36) NOT NULL, access_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, access_type ENUM('read', 'write', 'delete') NOT NULL, access_context JSON, user_ip VARCHAR(45), user_agent VARCHAR(255), FOREIGN KEY (memory_id) REFERENCES memory_items(id) ON DELETE CASCADE, INDEX idx_memory_id (memory_id), INDEX idx_access_time (access_time) ) ENGINE=InnoDB; """ self._execute_query(create_query) def _execute_query(self, query): """执行SQL查询""" if not self.connection: self.connect() try: cursor = self.connection.cursor() cursor.execute(query) self.connection.commit() print("表创建成功") return True except Error as e: print(f"表创建失败: {e}") self.connection.rollback() return False finally: if cursor: cursor.close() def setup_complete_schema(self): """设置完整的数据库架构""" self.create_database() self.create_memory_items_table() self.create_memory_tags_table() self.create_memory_access_logs_table() print("记忆系统数据库架构设置完成")
实现记忆条目的CRUD操作,包括创建、读取、更新、删除等功能。
# 记忆系统数据操作实现 class MemoryMySQLRepository: def __init__(self, config): self.config = config self.connection = None def connect(self): """建立数据库连接""" try: self.connection = mysql.connector.connect(**self.config) return True except Error as e: print(f"数据库连接失败: {e}") return False def create_memory(self, memory_data): """创建记忆条目""" if not self.connection: self.connect() try: cursor = self.connection.cursor() # 生成唯一ID memory_id = str(uuid.uuid4()) # 主插入语句 query = """ INSERT INTO memory_items ( id, type, category, title, content, content_type, metadata, importance, expiry_time ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) """ values = ( memory_id, memory_data['type'], memory_data['category'], memory_data['title'], memory_data['content'], memory_data['content_type'], json.dumps(memory_data.get('metadata', {})), memory_data.get('importance', 0.5), memory_data.get('expiry_time') ) cursor.execute(query, values) # 插入标签 if 'tags' in memory_data: tag_query = """ INSERT INTO memory_tags (id, memory_id, tag) VALUES (%s, %s, %s) """ for tag in memory_data['tags']: tag_id = str(uuid.uuid4()) cursor.execute(tag_query, (tag_id, memory_id, tag)) self.connection.commit() return memory_id except Error as e: self.connection.rollback() raise e finally: if cursor: cursor.close() def get_memory(self, memory_id): """获取记忆条目""" if not self.connection: self.connect() try: cursor = self.connection.cursor(dictionary=True) query = """ SELECT * FROM memory_items WHERE id = %s AND is_active = TRUE """ cursor.execute(query, (memory_id,)) result = cursor.fetchone() if result: # 获取标签 cursor.execute(""" SELECT tag FROM memory_tags WHERE memory_id = %s """, (memory_id,)) result['tags'] = [row['tag'] for row in cursor.fetchall()] # 更新访问统计 self.update_access_count(memory_id) return result except Error as e: raise e finally: if cursor: cursor.close() def update_access_count(self, memory_id): """更新访问统计""" if not self.connection: self.connect() try: cursor = self.connection.cursor() query = """ UPDATE memory_items SET access_count = access_count + 1, last_accessed = CURRENT_TIMESTAMP WHERE id = %s """ cursor.execute(query, (memory_id,)) self.connection.commit() except Error as e: raise e finally: if cursor: cursor.close()
实施MySQL性能优化策略,提升记忆系统的查询效率。
# MySQL性能优化实现 class MySQLPerformanceOptimizer: def __init__(self, config): self.config = config self.connection = None def connect(self): """建立数据库连接""" try: self.connection = mysql.connector.connect(**self.config) return True except Error as e: print(f"数据库连接失败: {e}") return False def setup_indexes(self): """设置优化索引""" if not self.connection: self.connect() try: cursor = self.connection.cursor() # 创建复合索引 indexes = [ ("idx_type_category_importance", "(type, category, importance)"), ("idx_access_importance", "(last_accessed, importance)"), ("idx_created_expiry", "(created_at, expiry_time)") ] for index_name, index_columns in indexes: query = f""" CREATE INDEX IF NOT EXISTS {index_name} ON memory_items {index_columns} """ cursor.execute(query) # 创建全文索引 fulltext_indexes = ["content", "title"] for field in fulltext_indexes: query = f""" CREATE FULLTEXT INDEX IF NOT EXISTS ft_{field} ON memory_items ({field}) """ cursor.execute(query) self.connection.commit() print("索引创建成功") return True except Error as e: print(f"索引创建失败: {e}") return False finally: if cursor: cursor.close() def optimize_queries(self): """优化查询语句""" if not self.connection: self.connect() try: cursor = self.connection.cursor() # 优化配置 optimization_queries = [ "SET GLOBAL innodb_buffer_pool_size = 2*1024*1024*1024;", # 2GB "SET GLOBAL innodb_flush_log_at_trx_commit = 2;", # 提高性能 "SET GLOBAL query_cache_size = 64*1024*1024;", # 64MB查询缓存 "SET GLOBAL long_query_time = 1;" # 1秒以上的查询记录慢查询 ] for query in optimization_queries: cursor.execute(query) self.connection.commit() print("查询优化设置成功") return True except Error as e: print(f"查询优化失败: {e}") return False finally: if cursor: cursor.close()
# 完整的记忆系统数据库实现 class MemorySystemDatabase: def __init__(self, config): self.config = config self.repository = MemoryMySQLRepository(config) self.optimizer = MySQLPerformanceOptimizer(config) def initialize_system(self): """初始化记忆系统""" # 创建数据库架构 schema = MemoryDatabaseSchema(self.config) schema.setup_complete_schema() # 设置性能优化 self.optimizer.setup_indexes() self.optimizer.optimize_queries() print("记忆系统数据库初始化完成") def create_memory_record(self, memory_data): """创建记忆记录""" return self.repository.create_memory(memory_data) # 使用示例 memory_config = { 'host': 'localhost', 'user': 'memory_user', 'password': 'secure_password', 'database': 'memory_system' } memory_system = MemorySystemDatabase(memory_config) # 初始化系统 memory_system.initialize_system() # 创建记忆 memory_data = { 'type': 'fact', 'category': 'programming', 'title': 'Python列表推导式', 'content': '列表推导式是Python中创建列表的简洁方式,语法为[表达式 for 变量 in 列表 if 条件]', 'content_type': 'text', 'tags': ['python', 'syntax', 'lists'], 'importance': 0.9 } memory_id = memory_system.create_memory_record(memory_data) print(f"创建记忆成功,ID: {memory_id}")
A:采用多种优化策略:
A:实施完整的ACID保证:
A:配置合理的连接池和连接参数:
A:从多个层面进行优化:
A:制定完善的备份策略:
本节详细介绍了关系型数据库在记忆系统中的具体实现。通过合理的表结构设计、高效的数据操作和性能优化策略,我们构建了一个可靠、高效的关系数据存储系统。MySQL凭借其成熟稳定、性能优秀的特性,为记忆系统提供了坚实的数据基础。
在下一节中,我们将探讨向量数据库的实现,专门处理记忆系统中的向量相似性搜索需求。
关键词:Agent记忆系统设计, 关系型数据库实现, MySQL性能优化, 数据库设计, 查询优化
难度:进阶
预计阅读:40 分钟