数据的存储方式有很多种 。根据不同的需求可以做出不同的选择 。我们以开发一个问答系统为例 。来介绍一下他们的不同使用场景和方法 。
关系型数据库
利用关系型数据库比如MySQL 。是最常用的一种方式 。刚开始开发一个简单的问答系统 。你就可以建几张表:
文章插图
上面的实体关系图是我刚用PlantUML画的一个简化版 。帮助理解 。源代码在这里:
@startuml!define Table(name,desc) class name as \"desc\" << (T,#FFAAAA) >>!define primary_key(x) <b>x</b>!define unique(x) <color:green>x</color>!define not_null(x) <u>x</u>hide methodshide stereotypes' entitiesTable(users, \"users\n(存储用户信息)\") {primary_key(id) INTEGERnot_null(unique(username)) VARCHAR[32]not_null(password) VARCHAR[64]age SMALLINTgender SMALLINTbirthday DATETIME}Table(questions, \"questions\n(存储问题信息)\") {primary_key(question_id) INTEGERnot_null(unique(user_id)) INTEGERtitle VARCHAR[255]content VARCHAR[2048]creationTime DATETIMEupdateTime DATETIME}Table(answers, \"answers\n(存储问题的答案)\") {primary_key(answer_id) INTEGERprimary_key(question_id) INTEGERnot_null(unique(user_id)) INTEGERcontent VARCHAR[2048]creationTime DATETIMEupdateTime DATETIME}' relationships' one to may relationship, 一对多的关系users --> questions : \"1个用户提了多个问题\"users --> answers : \"1个用户写了多个问题的答案\"questions --> answers : \"1个问题有多个答案\"@enduml
我是用VSCODE的插件画的:
文章插图
设计好表之后就可以在MySQL里面建表 。
如果你用Java做 。可以利用JPA框架做数据存储 。简单的可以利用MyBatis 。MyBatis是一个Java持久化框架 。它通过XML描述符或注解把对象与SQL语句关联起来 。简单、容易上手 。建议刚开始可以利用这个练练手 。
文章插图
复杂一些的可以利用Hibernate 。Hibernate是一个开放源代码的对象关系映射框架 。如果你喜欢面向对象的编程 。那就可以利用Hibernate把你设计的对象映射到数据库的各个表 。方便存取 。但是这个相对复杂 。学习起来比较花时间 。
文章插图
NoSQL
你也可以利用NoSQL数据库 。也非常简单 。比如mongodb. mongodb是一个基于分布式文件存储的开源数据库系统 。你可以把上面的表都设计成JSON文档 。直接存储在mongodb里面 。
文章插图
全文检索 elasticsearch
如果要支持全文检索 。你需要用Elasticsearch 。Elasticsearch是一个分布式的全文搜索引擎 。
文章插图
缓存 Redis
如果你的用户量大了 。要提高系统的访问速度 。你需要用到各种缓存技术比如redis 。
文章插图
消息系统 Kafka
如果你的系统发展壮大了 。又开发出很多其他的系统 。比如推荐系统 。审核系统 。你的各个系统之间需要消息通讯 。你还需要用到消息系统 Kafka 。
文章插图
我有几个视频 。利用动画来演示和解释Kafka的原理 。欢迎观看和评论 。
文章插图
分布式存储 Hadoop HDFS
随着你的用户的增加 。内容的增加 。你的网站每天产生几百GB甚至几百TB的数据 。你就需要用到分布式存储 Hadoop 。
文章插图
我也分享了一些关于Hadoop的视频 。利用动画来演示Hadoop的原理实现 。欢迎关注 。
文章插图
总结
根据系统的不同需求和不同发展阶段 。可以选择不同的存储方式 。如果是一开始为了验证自己的产品的想法 。也就是做PoC (prove of concept) 。那就可以选择简单易用的 。比如MySQL 。MongoDB等 。等将来系统发展了 。根据需要再升级存储方式 。比如ES 。redis 。kafka还有hadoop 。
【软件开发时数据在后台是如何保存的?】上面说的各种存储方式都支持各种编程语言 。Java 。Python 。Ruby 。NodeJS等等 。简单易用 。
如果是个人学习技术 。建议从简单的开始 。做一个小的项目 。比如我给的问答的例子 。慢慢体会不同的技术的不同使用方法和应用场景 。
推荐阅读
- 快手张开凤的真名 快手张开凤真实姓名叫什么
- dnf火龙贴膜 dnf火龙艾斯库尔怎么打
- 大暑是什么意思呢
- 问卷调查法的优点 问卷调查法在论文中怎么表述
- 手机连不上无线网是怎么回事?手机连不上无线网无ip分配怎么回事
- 你收藏过哪些沙雕笑话,当时让你笑出眼泪的那种,可以分享一下吗?
- 方形脸适合什么发型男 方形脸适合的发型女
- 南京奥体中心演唱会是露天的吗?南京奥体中心演唱会座位图
- 商务通广告 中国商务通营销平台