MongoDB基础与应用
本篇笔记根据MongoDB官方文档整理,包含MySQL与MongoDB的优缺点对比、MongoDB核心概念、基本操作以及金融领域的实际案例(使用Python语言):
一、MySQL vs MongoDB 优缺点对比
MySQL(关系型数据库)
优点:
成熟稳定: 历经多年发展,可靠性高,适用于传统企业级应用。
事务支持(ACID): 支持事务处理,保证数据一致性,适合金融、订单等场景。
SQL支持: 使用标准SQL查询,学习成本低,适合结构化数据处理。
数据完整性: 支持外键约束、表关联,确保数据关联性。
缺点:
扩展性有限: 垂直扩展依赖硬件,水平扩展(分库分表)复杂。
固定模式: 需预定义表结构,难以适应数据模型频繁变更的场景。
性能瓶颈: 复杂查询或高并发写入时性能下降,尤其在大量JOIN操作时。
MongoDB(文档型数据库)
优点:
高性能: 基于内存映射和BSON(二进制JSON)存储,读写速度快。
高可用性: 支持复制集(Replica Set)自动故障转移,确保数据不丢失。
可伸缩性: 支持分片(Sharding)水平扩展,可分布式存储PB级数据。
灵活模式: 动态文档结构,无需预定义表结构,适合半结构化或实时变更的数据。
复杂查询: 支持丰富的查询语法(如聚合管道、索引、地理位置查询)。
缺点:
事务限制: 早期版本缺乏跨文档事务,4.0+版本支持多文档事务,但性能略低。
存储开销: 文档嵌套可能导致冗余存储,占用空间较大。
学习曲线: 非关系型概念需适应,如文档模型设计、分片策略。
总结:
MySQL适合事务强一致性、结构化数据、OLTP场景(如银行系统、ERP)。
MongoDB适合高并发读写、灵活数据模型、大数据量场景(如实时分析、内容管理)。
二、MongoDB核心概念
数据库与集合
数据库(Database): 逻辑命名空间,包含多个集合。
集合(Collection): 类似“表”,但无需固定结构,可存储不同结构的文档。
文档(Document): 核心数据单元,类JSON的BSON格式,支持嵌套和数组。
示例(Python创建集合):
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["mydatabase"]
collection = db["mycollection"]文档结构
键值对形式,支持嵌套文档和数组。
示例文档:
{
"name": "Alice",
"age": 30,
"address": {
"city": "New York",
"zip": "10001"
},
"hobbies": ["Coding", "Reading"]
}架构
复制集(Replica Set): 包含主节点(Primary)和多个从节点(Secondary),自动同步数据,故障时选举新主节点。
分片(Sharding): 将数据分布到多个分片(Shard),解决单节点容量和性能瓶颈。
三、MongoDB基本操作(Python示例)
连接与认证
client = MongoClient("mongodb://user:pass@localhost:27017/mydatabase")CRUD操作
插入文档:doc = {"name": "Bob", "age": 25}
collection.insert_one(doc)
查询文档:
result = collection.find({"age": {"gt": 20}})
for doc in result:
print(doc)更新文档:
collection.update_one({"name": "Bob"}, {"set": {"age": 26}})
删除文档:
collection.delete_many({"age": {"lt": 18}})
聚合操作
pipeline = [
{"match": {"age": {"gt": 20}}},
{"group": {"_id": "city", "avgAge": {"avg": "age"}}}
]
result = collection.aggregate(pipeline)四、金融领域实际案例:交易数据分析
场景: 实时记录用户交易数据,分析高频交易行为,检测异常交易。
数据模型:
{
"user_id": "U123",
"timestamp": ISODate("2026-06-22T10:30:00Z"),
"amount": 1000,
"type": "withdraw",
"currency": "USD",
"notes": "ATM withdrawal"
}Python实现:
插入交易记录:
import datetime
tx_doc = {
"user_id": "U123",
"timestamp": datetime.datetime.now(),
"amount": 500,
"type": "deposit"
}
collection.insert_one(tx_doc)查询用户近7天总交易额:
start_date = datetime.datetime.now() - timedelta(days=7)
query = {"user_id": "U123", "timestamp": {"gte": start_date}}
total_amount = collection.aggregate([
{"match": query},
{"group": {"_id": None, "total": {"sum": "amount"}}}
])["total"]风险检测:异常高频交易警报
pipeline = [
{"match": {"timestamp": {"gte": start_date}}},
{"group": {"_id": "user_id", "tx_count": {"sum": 1}}},
{"match": {"tx_count": {"$gt": 100}}} # 阈值:单用户7天内超100笔交易
]
high_risk_users = list(collection.aggregate(pipeline))优势:
实时写入: 支持高并发交易记录插入。
灵活模型: 可扩展字段(如添加geoLocation追踪交易位置)。
聚合分析: 快速统计交易量、检测异常,满足风控需求。
五、总结
MongoDB凭借其灵活模式、高性能和可扩展性,在金融领域适用于实时交易处理、用户画像、风险分析等场景。结合Python的pymongo库,可快速构建高效的数据处理系统。
参考资料:
MongoDB官方文档:https://docs.mongodb.com/
PyMongo驱动:https://pymongo.readthedocs.io/