如何在mysql 或者 其他的数据库中存放图片 音频 视频背景
MySQL 一直以来都有 TEXT、BLOB 等类型用来存储图片、视频等大对象信息 。比如一张图片 , 随便一张都 5M 以上 。视频也是 , 随便一部视频就是 2G 以上 。
假设用 MySQL 来存放电影视频等信息,一部是 2G,那么存储 1000 部就是 2TB,2TB 也就是 1000 条记录而已,但是对数据库性能来说,不仅仅是看记录数量,更主要的还得看占用磁盘空间大小 。空间大了,所有以前的经验啥的都失效了 。
所以一般来说存放这类信息 , 也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了 。数据库只关心怎么来的快 , 怎么来的小 。
举例
虽然不推荐 MySQL 这样做,但是也得知道 MySQL 该怎么做才行,做到心里有数 。比如下面一张微信图片,大概 5M 的样子 。
root@ytt:/var/lib/mysql-files# ls -sihl 微信图片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信图片_20190711095019.jpg
拷贝 100 份这样的图片来测试
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jpg;done;
root@ytt:/var/lib/mysql-files# ls
100.jpg17.jpg25.jpg33.jpg41.jpg4.jpg58.jpg66.jpg74.jpg82.jpg90.jpg99.jpgf8.tsv
10.jpg18.jpg26.jpg34.jpg42.jpg50.jpg59.jpg67.jpg75.jpg83.jpg91.jpg9.jpg微信图片_20190711095019.jpg
1111.jpg19.jpg27.jpg35.jpg43.jpg51.jpg5.jpg68.jpg76.jpg84.jpg92.jpgf1.tsv
11.jpg1.jpg28.jpg36.jpg44.jpg52.jpg60.jpg69.jpg77.jpg85.jpg93.jpgf2.tsv
12.jpg20.jpg29.jpg37.jpg45.jpg53.jpg61.jpg6.jpg78.jpg86.jpg94.jpgf3.tsv
13.jpg21.jpg2.jpg38.jpg46.jpg54.jpg62.jpg70.jpg79.jpg87.jpg95.jpgf4.tsv
14.jpg22.jpg30.jpg39.jpg47.jpg55.jpg63.jpg71.jpg7.jpg88.jpg96.jpgf5.tsv
15.jpg23.jpg31.jpg3.jpg48.jpg56.jpg64.jpg72.jpg80.jpg89.jpg97.jpgf6.tsv
16.jpg24.jpg32.jpg40.jpg49.jpg57.jpg65.jpg73.jpg81.jpg8.jpg98.jpgf7.tsv
我们建三张表,分别用 LONGBLOB、LONGTEXT 和 VARCHAR 来存储这些图片信息
mysql show create table tt_image1G
*************************** 1. row ***************************
Table: tt_image1
Create Table: CREATE TABLE `tt_image1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql show create table tt_image2G
【mysql怎么保存对象 mysql保存表格】*************************** 1. row ***************************
Table: tt_image2
Create Table: CREATE TABLE `tt_image2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql show create table tt_image3G
*************************** 1. row ***************************
Table: tt_image3
Create Table: CREATE TABLE `tt_image3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
我们来给三张表插入 100 张图片(插入前 , 建议把 max_allowed_packet 设置到最大)
tt_image1
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)
values (load_file('/var/lib/mysql-files/$i.jpg'))";done;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytt.tt_image3(image_file) values
('/var/lib/mysql-files/$i.jpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";
检查下三张表记录数
mysql select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3; ----------- ---------- | name| count(*) | ----------- ---------- | tt_image1 |100 || tt_image2 |100 || tt_image3 |100 | ----------- ---------- 3 rows in set (0.00 sec)
看下文件大?。?可以看到实际大小排名 , LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储图片路径的表 tt_image3 。所以这里从存储空间来看,存放路径最占优势 。
root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd27460580K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd
那么怎么把图片取出来呢?
tt_image3 肯定是最容易的
mysql select * from tt_image3; ---- ---------------------------- | id | image_file| ---- ---------------------------- |1 | /var/lib/mysql-files/1.jpg | ---- ---------------------------- ...100 rows in set (0.00 sec)
tt_image1 直接导出来二进制文件即可 , 下面我写了个存储过程,导出所有图片 。
mysql DELIMITER $$mysql USE `ytt`$$mysql DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql BEGINDECLARE i,cnt INT DEFAULT 0;SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt;WHILE icnt DOSET @stmt = CONCAT('select image_file from tt_image1limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'.jpg''');PREPARE s1 FROM @stmt;EXECUTE s1;DROP PREPARE s1;SET i = i1;END WHILE;END$$mysql DELIMITER ;mysql call sp_get_image;
tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可 。
总结
这里我举了个用 MySQL 来存放图片的例子 , 总的来说有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
如何使用 MySQL 来存储无模式的数据我们在数据库中存储的是无模式的属性集(例如JSON对象或python字典) 。存储的记录只需一个名为id的16字节的UUID属性 。对数据库而言实体的其mysql怎么保存对象他部分是不可见的 。我们可以简单地存入新属性来改变schema(可以简单理解为数据表中只有两个字段:id,data;其中data存储的是实体的属性集) 。
我们通过保存在不同表中的索引来检索数据 。如果想检索每个实体中的三个属性mysql怎么保存对象,我们就需要三个数据表-每个表用于检索某一特定属性 。如果不想再用某一索引mysql怎么保存对象了mysql怎么保存对象,我们要在代码中停止该索引对应表的写操作,并可选地删除那个表 。如果想添加个新索引,只需要为该索引新建个MySQL表,并启动一个进程异步地为该表添加索引数据(不影响运行中的服务) 。
最终,虽然我们的数据表增多mysql怎么保存对象了,但添加和删除索引却变得简单了 。我们大力改善了添加索引数据的进程(我们称之为“清洁工")使其在快速添加索引的同时不会影响站点 。我们可以在一天内完成新属性的保存和索引,并且我们不需要对调主从MySQL数据库,也不需要任何其他可怕的操作 。
如何将一个java对象保存到数据库中?比如一个Map对象保存到mysql数据库的一个字段中???我学习Java还没那么深入,不过我想可以保存一个字段名,用的时候getString()出来 , 然后Class.forName("获取的字段"),回答不对见谅…………
mySql数据库和Sql数据库分别用什么数据类型存储对象(object 比如:HasTable ArrayList)?要能表示任意对象,只能用二进制了 。
先吧Session序列化为二进制数组,再写入数据库
mysql中的存储引擎如何设置?如果是将INNODB改成MYISAM怎样改?还有DOS中的MYSQL,怎样保存数据库,表等对象?1,mysql中的存储引擎如何设置?------------默认是myisam , 建表的时候也指定,例如: create table test(id int)engine=innodb;
2,如果是将INNODB改成MYISAM怎样改?--------------------alter table test engine=myisam;
3,还有DOS中的MYSQL,怎样保存数据库,表等对象?-----------------在dos中执行 create database databasename; create table test(id int);这样就生成了库和表;对应的系统文件在mysql的安装目录的data下,数据库名对应一个文件夹 。比如 create database testdb,那么就能在data目录下找到testdb目录;表等对象的文件要看具体的引擎 , 如果是myisam引擎,那么就会有三个文件,test.frm,test.myi,test.myd三个,innodb的话只有一个test.frm结构文件,数据和索引文件都在 ibdata1表空间里 。
4,PHP如何和MYSQL连接?是否非要输入代码?有没有别的简单方法如UI式设置-------------------需要你写连接信息,网上给你找了个php连接mysql的例子,你参考下
?php
$mysql_server_name='localhost'; //改成自己的mysql数据库服务器
$mysql_username='root'; //改成自己的mysql数据库用户名
$mysql_password='198791'; //改成自己的mysql数据库密码
$mysql_database='mydb'; //改成自己的mysql数据库名
$conn=mysql_connect ($mysql_server_name,$mysql_username,$mysql_password,$mysql_database); //从这句开始向下解释
$sql='insert into book (name,pwd) values ("ggg","ggg");';
//这是一个SQL语句: 向book表中插入一条记录
mysql_query($sql);
//执行SQL语句
mysql_select_db($mysql_database,$conn); //选择上面表所在的数据库(这一句应该在上面一句的前面执行)
$result=mysql_query($sql); //这一句完全是多余的,和上面的那一个是一样的!
mysql_close($conn); //关闭数据库连接
echo "Hello!操作成功!"; //显示提示信息
?
那些年我们操作的MySQL存储,这些你都会了吗1. 准备工作
在开始之前,请确保已经安装好了MySQL数据库并保证它能正常运行 , 而且需要安装好PyMySQL库 。
2. 连接数据库
这里 , 首先尝试连接一下数据库 。假设当前的MySQL运行在本地,用户名为root , 密码为123456,运行端口为3306 。这里利用PyMySQL先连接MySQL,然后创建一个新的数据库 , 名字叫作spiders,代码如下:
import pymysql
db = pymysql.connect(host='localhost',user='root', password='123456', port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = https://www.04ip.com/post/cursor.fetchone()
print('Database version:', data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
db.close()
运行结果如下:
Database version: ('5.6.22',)
这里通过PyMySQL的connect()方法声明一个MySQL连接对象db,此时需要传入MySQL运行的host(即IP) 。由于MySQL在本地运行,所以传入的是localhost 。如果MySQL在远程运行,则传入其公网IP地址 。后续的参数user即用户名,password即密码,port即端口(默认为3306) 。
连接成功后,需要再调用cursor()方法获得MySQL的操作游标,利用游标来执行SQL语句 。这里我们执行了两句SQL , 直接用execute()方法执行即可 。第一句SQL用于获得MySQL的当前版本,然后调用fetchone()方法获得第一条数据 , 也就得到了版本号 。第二句SQL执行创建数据库的操作,数据库名叫作spiders , 默认编码为UTF-8 。由于该语句不是查询语句,所以直接执行后就成功创建了数据库spiders 。接着 , 再利用这个数据库进行后续的操作 。
3. 创建表
一般来说,创建数据库的操作只需要执行一次就好了 。当然,我们也可以手动创建数据库 。以后,我们的操作都在spiders数据库上执行 。
创建数据库后,在连接时需要额外指定一个参数db 。
mysql怎么保存对象的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于mysql保存表格、mysql怎么保存对象的信息别忘了在本站进行查找喔 。
推荐阅读
- mysql两个版本是什么 mysql有两个版本
- 动态切换mongodb数据源,mongodb主从自动切换
- gis赛事城乡规划,城乡规划gis应用指南
- 游子直播伴侣,游戏直播伴侣
- oracle怎么撤销删除 oracle delete 执行后如何取消提交
- 静物拍摄手法有什么,静物摄影手法
- pg数据库找回误删数据库,找回数据库删除的数据
- linux启动dd命令 linux启动dwm
- 关于thinkphp302错误的信息