【Python使用】嘿马头条项目从到完整开发教程第1篇:简介,1. 内容【附代码文档】
本教程的知识点为:简介 1. 内容 2. 目标 产品效果 ToutiaoWeb虚拟机使用说明 数据库 理解ORM 作用 思考: 使用ORM的方式选择 数据库 SQLAlchemy操作 1 新增 2 查询 all() 数据库 分布式ID 1 方案选择 2 头条 使用雪花算法 (代码 toutiao-backend/common/utils/snowflake) 数据库 Redis 1 Redis事务 基本事务指令 Python客户端操作 Git工用流 调试方法 JWT认证方案 JWT & JWS & JWE Json Web Token(JWT) OSS对象存储 七牛云存储 需求 方案 使用 缓存 缓存架构 多级缓存 头条项目的方案 缓存数据 缓存 缓存问题 1 缓存 2 缓存 头条项目缓存与存储设计 APScheduler定时任务 定时修正统计数据 RPC RPC简介 1. 什么是RPC RPC 编写客户端 头条首页新闻推荐接口编写 即时通讯 即时通讯简介 即时通讯 Socket.IO 1 简介 优点: 缺点: Elasticsearch 简介与原理 1 简介 属于面向文档的数据库 2 搜索的原理——倒排索引(反向索引)、分析、相关性排序 Elasticsearch 文档 索引文档(保存文档数据) 获取指定文档 判断文档是否存在 单元测试 为什么要测试 测试的分类 什么是单元测试 断言方法的使用:
全套笔记资料代码移步: 前往gitee仓库查看
感兴趣的小伙伴可以自取哦~
全套教程部分目录:
部分文件图片:
简介
1. 内容
- 项目介绍
- 数据库方案
- Gitflow工作流
- 认证方案
- 对象存储
- 缓存方案
- RPC方案 grpc
- 搜索方案
- 即时通讯方案
- APScheduler定时任务
- supervisor进程管理
2. 目标
- 以头条产品为依托案例,但不再以具体业务实现为主
- 力求掌握解决不同问题的实施方案
- 深入理解并巩固前面所学的知识
产品效果
-
用户端
-
移动web
[
- iOS
[ (App下载地址)](
- Android
[ (App下载地址)](
- 自媒体端
[
- MIS管理后台
[
ToutiaoWeb虚拟机使用说明
- 作为项目的开发环境
-
黑窗口 无GNOME 模拟企业中的开发服务器环境
-
CentOS7.2
-
开机前先将虚拟机调成NAT模式
- 虚拟机占用内存4G,如果主机内存不足,可启动前将内存占用调为2G
-
在Windows中使用SSH客户端
-
Termius
-
xshell
-
ssh python@自己的ip地址
-
用户名 密码
-
系统
- root -> chuanzhi
- python -> chuanzhi
-
MySQL
- root -> mysql
-
端口
-
MySQL (mariadb)
- master -> 3306
- slave -> 8306 (mysql -uroot -p -h 127.0.0.1 --port=8306)
-
Redis
- cluster -> 7000 7001 7002 7003 7004 7005
- master & slave -> 6380 6381
- sentinel -> 26380 26381 26382
-
Elasticsearch 5
- 9200
-
Python 虚拟环境
-
workon toutiao
-
关机 sudo shutdown now
- 重启 reboot
Pycharm远程开发
可以在Windows中使用Pycharm编写代码,而代码的调试运行可以使用远程服务器中的python解释器。
在本地创建好工程项目(或从git上clone下代码)后,用Pycharm打开:
- 打开「Tools」设置 「Deployment」
- 选择SFTP
- 设置服务器名字
- 设置服务器信息
*图片无法加载*
- 测试服务器连接是否可用
- 设置上传代码的目录映射
- 打开设置,设置远程Python解释器
- 选择已存在的服务器设置
- 选择Create 复制服务器设置到解释器中
- 选择远程服务器中虚拟环境里的解释器
/home/python/.virtualenvs/toutiao/bin/python
- 设置远程服务器运行代码的目录映射
- 若Pycharm不能自动上传代码,可勾选Automatic Upload
注意,设置后Pycharm要加载环境,需要花费一定时间(只在配置后第一次使用发生)
产品与开发
1 产品介绍
头条是一款基于个性化推荐的科技资讯类阅读产品,类似于今日头条,产品分为以下几个终端:
- 用户端
用户获取个性化推荐资讯的终端,有阅读、关注、评论、智能客服(聊天机器人)等功能,分移动Web页面及iOS和安卓手机App。
- 自媒体端
自媒体端是自媒体作者编辑、发布资讯文章、查看自媒体号运营数据的平台。
- MIS管理后台
MIS管理后台是头条产品公司运营管理的后台,可进行用户管理、文章审核及管理、评论管理等。
2 原型图与UI图
- 产品原型图
产品经理制作,是产品的原型设计,表达产品的功能组成
产品原型图的查看,需要安装Axure RP的Chrome浏览器扩展,方式如下:
- 进入Chrome浏览器「扩展程序」页面
- 打开「开发者模式」
- 点击「加载已解压的扩展程序」,并选择「Axure_RP_Extension_for_Chrome_0.6.3」目录
- 选择已安装扩展的「详细信息」
- 打开「允许访问文件网址」
安装后,打开原型图目录中的「index.html」文件即可。
原型图包含:
-
前台原型图
- 用户端
- 自媒体端
-
后台原型图(MIS管理后台)
-
UI效果图
用户界面效果图,由UI人员设计,是产品最终的用户能够看到的产品样式效果。
3 技术架构
项目采用前后端分离模式。
4 开发
人员团队(最少规模):
-
产品经理 1人
-
UI 1人
-
前端 2~3 人
-
Flutter 开发APP
-
Vue 开发Web页面
-
Web后端 2~3人
-
推荐系统 2~3 人
-
Chatbot 1~2 人
-
测试 1~2 人
开发平台
- Gitlab
请到[
为方便将大家拉入到项目团队中,注册帐号的要求
注意:此gitlab不要放私人项目,会定期清理数据。
-
使用Windows的同学需要在windows中安装git
-
YApi 接口管理
[
数据库
-
数据库设计
-
SQLAlchemy
-
数据库理论
-
分布式ID
-
Redis
数据库
-
数据库设计
-
SQLAlchemy
-
数据库理论
-
分布式ID
-
Redis
数据库设计
1 需求
根据头条前台产品原型图中用户端的部分,进行数据库设计。
- 表结构
- 字段类型、是否允许为null、是否有默认值
- 索引设计
- 数据库引擎的选择
2 注意事项
-
为了查询效率,可以做冗余字段设计(空间换时间的思想,属于一种反范式设计)
-
字段类型的选择
-
整型的存储大小与显示大小
mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?
我们建立下面这张表:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`i1` int(3) unsigned zerofill DEFAULT NULL,
`i2` int(6) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
插入一些数据后
发现,无论是int(3), int(6), 都可以显示6位以上的整数。但是,当数字不足3位或6位时,前面会用0补齐。
手册解释是这样的:
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。
最终答案:存储范围相同。
-
char 与 varchar 的选择
- char 不可变,查询效率高,可能造成存储浪费
- varchar 可变,查询效率不如char,节省空间
常见MySQL数据类型
类 型 | 大 小 | 描 述 |
---|---|---|
CAHR(Length) | Length字节 | 定长字段,长度为0~255个字符 |
VARCHAR(Length) | String长度+1字节或String长度+2字节 | 变长字段,长度为0~65 535个字符 |
TINYTEXT | String长度+1字节 | 字符串,最大长度为255个字符 |
TEXT | String长度+2字节 | 字符串,最大长度为65 535个字符 |
MEDIUMINT | String长度+3字节 | 字符串,最大长度为16 777 215个字符 |
LONGTEXT | String长度+4字节 | 字符串,最大长度为4 294 967 295个字符 |
TINYINT(Length) | 1字节 | 范围:-128~127,或者0~255(无符号) |
SMALLINT(Length) | 2字节 | 范围:-32 768~32 767,或者0~65 535(无符号) |
MEDIUMINT(Length) | 3字节 | 范围:-8 388 608~8 388 607,或者0~16 777 215(无符号) |
INT(Length) | 4字节 | 范围:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(无符号) |
BIGINT(Length) | 8字节 | 范围:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(无符号) |
FLOAT(Length, Decimals) | 4字节 | 具有浮动小数点的较小的数 |
DOUBLE(Length, Decimals) | 8字节 | 具有浮动小数点的较大的数 |
DECIMAL(Length, Decimals) | Length+1字节或Length+2字节 | 存储为字符串的DOUBLE,允许固定的小数点 |
DATE | 3字节 | 采用YYYY-MM-DD格式 |
DATETIME | 8字节 | 采用YYYY-MM-DD HH:MM:SS格式 |
TIMESTAMP | 4字节 | 采用YYYYMMDDHHMMSS格式;可接受的范围终止于2037年 |
TIME | 3字节 | 采用HH:MM:SS格式 |
ENUM | 1或2字节 | Enumeration(枚举)的简写,这意味着每一列都可以具有多个可能的值之一 |
SET | 1、2、3、4或8字节 | 与ENUM一样,只不过每一列都可以具有多个可能的值 |
-
索引
-
主键 Primary Key
-
外键 Foreign Key
- 保持数据完整性
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
例如:
ALTER TABLE `user_resource` CONSTRAINT `FKEEAF1E02D82D57F9` FOREIGN KEY (`user_Id`) REFERENCES `sys_user` (`Id`)
CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
* ON DELETE:删除主表时自动删除从表。删除从表,主表不变
* ON UPDATE:更新主表时自动更新从表。更新从表,主表不变
SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)
* ON DELETE:删除主表时自动更新从表值为NULL。删除从表,主表不变
* ON UPDATE:更新主表时自动更新从表值为NULL。更新从表,主表不变
NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
* ON DELETE:从表记录不存在时,主表才可以删除。删除从表,主表不变
* ON UPDATE:从表记录不存在时,主表才可以更新。更新从表,主表不变
RESTRICT
同no action, 都是立即检查外键约束
SET DEFAULT
父表有变更时,子表将外键列设置成一个默认的值 但Innodb目前不支持
-
索引 Key / Index
- 提升查询效率,减慢增删改速度
-
唯一约束 Unique
- 保证数据不重复
-
MySQL数据库引擎
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
SHOW ENGINES # 命令来查看MySQL提供的引擎
SHOW VARIABLES LIKE 'storage_engine'; # 查看数据库默认使用哪个引擎
InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。InnoDB主要特性有:
1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。
InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合
2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
3、In
- 点赞
- 收藏
- 关注作者
评论(0)