默认情况下,聊天记忆存储在内存中。如果需要持久化存储,可以实现一个自定义的聊天记忆存储类,以便将聊天消息存储在你选择的任何持久化存储介质中。
1. 存储介质的选择
大模型中聊天记忆的存储选择哪种数据库,需要综合考虑数据特点、应用场景和性能要求等因素,以下是一些常见的选择及其特点:
-
MySQL
-
特点:关系型数据库。支持事务处理,确保数据的一致性和完整性,适用于结构化数据的存储和查询。
-
适用场景:如果聊天记忆数据结构较为规整,例如包含固定的字段如对话 ID、用户 ID、时间戳、消息内容等,且需要进行复杂的查询和统计分析,如按用户统计对话次数、按时间范围查询特定对话等,MySQL 是不错的选择。
-
-
Redis
-
特点:内存数据库,读写速度极高。它适用于存储热点数据,并且支持多种数据结构,如字符串、哈希表、列表等,方便对不同类型的聊天记忆数据进行处理。
-
适用场景:对于实时性要求极高的聊天应用,如在线客服系统或即时通讯工具,Redis 可以快速存储和获取最新的聊天记录,以提供流畅的聊天体验。
-
-
MongoDB
-
特点:文档型数据库,数据以
JSON - like的文档形式存储,具有高度的灵活性和可扩展性。它不需要预先定义严格的表结构,适合存储半结构化或非结构化的数据。 -
适用场景:当聊天记忆中包含多样化的信息,如文本消息、图片、语音等多媒体数据,或者消息格式可能会频繁变化时,MongoDB 能很好地适应这种灵活性。例如,一些社交应用中用户可能会发送各种格式的消息,使用 MongoDB 可以方便地存储和管理这些不同类型的数据。
-
-
Cassandra-
特点:是一种分布式的 NoSQL 数据库,具有高可扩展性和高可用性,能够处理大规模的分布式数据存储和读写请求。适合存储海量的、时间序列相关的数据。
-
适用场景:对于大型的聊天应用,尤其是用户量众多、聊天数据量巨大且需要分布式存储和处理的场景,Cassandra 能够有效地应对高并发的读写操作。例如,一些面向全球用户的社交媒体平台,其聊天数据需要在多个节点上进行分布式存储和管理,Cassandra 可以提供强大的支持。
-
2. MongoDB
简介
MongoDB 是一个基于文档的 NoSQL( 非关系型的数据库 ) 数据库,设计理念是为了应对大数据量、高性能和灵活性需求。
MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。
- 数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
- 集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
- 文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组:

安装MongoDB
服务器:mongodb-windows-x86_64-8.0.6-signed.msi https://www.mongodb.com/try/download/community
命令行客户端 :mongosh-2.5.0-win32-x64.zip https://www.mongodb.com/try/download/shell
图形客户端:mongodb-compass-1.39.3-win32-x64.exe https://www.mongodb.com/try/download/compas
使用mongosh
启动 MongoDB Shell:
在命令行中输入 mongosh 命令,启动 MongoDB Shell,如果 MongoDB 服务器运行在本地默认端口(27017),则可以直接连接。
mongosh
连接到 MongoDB 服务器:
如果 MongoDB 服务器运行在非默认端口或者远程服务器上,可以使用以下命令连接:
mongosh --host <hostname>:<port>
其中 <hostname> 是 MongoDB 服务器的主机名或 IP 地址,<port> 是 MongoDB 服务器的端口号。
执行基本操作:
连接成功后,可以执行各种 MongoDB 数据库操作。例如:
- 查看当前数据库:
db - 显示数据库列表:
show dbs - 切换到指定数据库:
use <database_name> - 执行查询操作:
db.<collection_name>.find() - 插入文档:
db.<collection_name>.insertOne({ ... }) - 更新文档:
db.<collection_name>.updateOne({ ... }) - 删除文档:
db.<collection_name>.deleteOne({ ... }) - 退出 MongoDB Shell:
quit()或者exit
CRUD
# 插入文档
test> db.mycollection.insertOne({
name: "Alice", age: 30 })
# 查询文档
test> db.mycollection.find()
# 更新文档
test> db.mycollection.updateOne({
name: "Alice" }, {
$set: {
age: 31 } })
# 删除文档
test> db.mycollection.deleteOne({
name: "Alice" })
# 退出 MongoDB Shell
test> quit()
使用mongodb-compass

整合SpringBoot
引入MongoDB依赖:
<!-- Spring Boot Starter Data MongoDB -->
<dependency>
<groupId>

最低0.47元/天 解锁文章
493

被折叠的 条评论
为什么被折叠?



