图片系统概述
------------------
1. 架构:mysql+php+文件系统
2. 原理:
* mysql存储基本的meta信息。
* 文件系统存储图片。
* 将小图片汇聚成大图片,通过图片文件即可完成数据的恢复。
* 利用mysql主从,实现meta信息的备份,进而实现分布式的查询。
* 每个节点都可以写入和读取图片,去除中心化。写入图片后,自动通知其他节点同步数据。
图片存储原理
------------
* 图片系统由若干个节点组成,每个节点的图片存储了若干个图片块。
* 节点接收到图片上传请求后,计算出图片的md5值,检查是否已经上传过,上传过则创建一个参考图片请求,否则创建一个普通图片请求。
* 每个节点同时设立多个并行写入的块(默认8个),根据获取的图片自增ID,依次将图片分布到并行块中,从而避免对同一个文件的并行操作。
* 每个块初始大小64M,存储256张图片,当超过这个数目的图片数目后,将新建一个块,继续写入。
* 由于同一个文件夹的文件数目过多时,检索较慢,因而设定每1024个块汇入一个文件夹。
* 每个图片保存的时候,会根据节点数多少,将对应的块自动备份到其他节点上。
一个节点的基本目录结构如下
* root_dir
* node1 // 主节点
* dir_0
* block_0.data // 图片块
* block_1.data
* ...
* dir_1
* block_1024.data
* block_1025.data
* ...
* node2 // 用来存储其他节点的备份目录
* dir_0
* block_0.data
* ...
图片ID结构
------------
### 基本结构
* 2字节的node_id
* 4字节的自增id(一个节点最多42亿张图片,平均100k的话,约400T数据)
* 3字节的块id(允许放0.16亿个块,假设每个块64M的话,可存储1024T数据)
* 4字节的文件id(块里边文件的位置,最多允许一个块4G)
* 4字节的meta信息
* 14bit的宽
* 14bit的高
* 4bit的类型
总共`17`个字节,用64位字符表示,最多需要17*8/6=22.6 ≈ `23`个字符
### 64位字符
> 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!
### 图片存储结构
#### 通用存储结构
前面26个字节是相同的
* 1字节标识位
* 0x1:类型 0 正常图片 1 参考图片
* 0x2:状态 0 正常 1 删除
* 17字节图片ID
* 4字节创建时间
* 8字节md5长整形数字
后面的存储结构按类型分为两种:
1. 正常图片
* 4字节 图片长度
* 图片内容
共占用30个字节+图片字节数
2. 参考图片
* 17字节的参考图片id
共占用39个字节
服务器搭建方法
--------------
### nginx配置
```nginx
server {
server_name node4.demo.com;
listen 8001
root ~/sites/storage/runroot/;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.php$ {
fastcgi_param STORAGE_NODE_ID 4; # 此处设置好节点的节点ID,或者在配置文件直接指定
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_HOST $host;
include fastcgi_params;
}
}
```
```shell
git clone https://github.com/ihapn/storage.git ~/sites/storage
cd ~/sites/storage
mkdir log
chmod 777 log
cp conf/hapn.conf.php.default conf/hapn.conf.php
```
### 图片存储目录
创建图片存储目录
```shell
mkdir ~/image/data -p
chmod 777 ~/image/data
```
访问 [http://node4.demo.com/guanli/node](http://node4.demo.com/guanli/node),将节点添加进去,即可开始上传图片。
添加节点时,需要将图片根目录指定为 ~/image/data
没有合适的资源?快使用搜索试试~ 我知道了~
基于php的图片存储系统.zip
共42个文件
phtml:12个
php:6个
js:6个
0 下载量 76 浏览量
2024-01-18
11:31:36
上传
评论
收藏 654KB ZIP 举报
温馨提示
软件开发设计:PHP、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
基于php的图片存储系统.zip (42个子文件)
cm
Lessp
api
StorageExport.php 31KB
readme.md 4KB
.gitmodules 76B
plugin
filter
StorageInitFilter.php 2KB
runroot
js
bootstrap.min.js 35KB
uikit
docs.js 2KB
lightbox.js 17KB
modal.js 8KB
uikit.js 89KB
jquery.js 288KB
css
bootstrap.min.css 115KB
uikit
docs.css 113KB
lightbox.css 2KB
uikit.css 153KB
bootstrap-theme.min.css 19KB
index.php 1KB
fonts
FontAwesome.otf 92KB
glyphicons-halflings-regular.svg 106KB
glyphicons-halflings-regular.ttf 44KB
glyphicons-halflings-regular.woff 23KB
glyphicons-halflings-regular.eot 20KB
fontawesome-webfont.eot 59KB
glyphicons-halflings-regular.woff2 18KB
fontawesome-webfont.woff 70KB
fontawesome-webfont.woff2 55KB
fontawesome-webfont.ttf 119KB
page
_private
ActionController.php 6KB
tpl
error.phtml 466B
layout.phtml 831B
notfound.phtml 473B
nopower.phtml 567B
guanli
node
ActionController.php 7KB
tpl
blocks.phtml 351B
image_list.phtml 2KB
node_edit.phtml 1KB
node_add.phtml 909B
images.phtml 1KB
block.phtml 1KB
node.phtml 2KB
image
ActionController.php 2KB
tpl
upload.phtml 511B
conf
hapn.conf.php.bak 2KB
共 42 条
- 1
资源评论
妄北y
- 粉丝: 2w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功