背景
MySQL 一直以来都有 TEXT、BLOB 等类型用来存储、视频等大对象信息。比如一张,随便一张都 5M 以上。视频也是,随便一部视频就是 2G 以上。
假设用 MySQL 来存放**视频等信息,一部是 2G,那么存储 1000 部就是 2TB,2TB 也就是 1000 条记录而已,但是对数据库性能来说,不仅仅是看记录数量,更主要的还得看占用磁盘空间大小。空间大了,所有以前的经验啥的都失效了。
所以一般来说存放这类信息,也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了。数据库只关心怎么来的快,怎么来的小。
举例
虽然不推荐 MySQL 这样做,但是也得知道 MySQL 该怎么做才行,做到心里有数。比如下面一张微信,大概 5M 的样子。
root@ytt:/var/lib/mysql-files# ls -sihl 微信_20190711095019jpg274501 54M -rw-r--r-- 1 root root 54M Jul 11 07:17 微信_20190711095019jpg
拷贝 100 份这样的来测试
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信_20190711095019jpg "$i"jpg;done;
root@ytt:/var/lib/mysql-files# ls
100jpg 17jpg 25jpg 33jpg 41jpg 4jpg 58jpg 66jpg 74jpg 82jpg 90jpg 99jpg f8tsv
10jpg 18jpg 26jpg 34jpg 42jpg 50jpg 59jpg 67jpg 75jpg 83jpg 91jpg 9jpg 微信_20190711095019jpg
1111jpg 19jpg 27jpg 35jpg 43jpg 51jpg 5jpg 68jpg 76jpg 84jpg 92jpg f1tsv
11jpg 1jpg 28jpg 36jpg 44jpg 52jpg 60jpg 69jpg 77jpg 85jpg 93jpg f2tsv
12jpg 20jpg 29jpg 37jpg 45jpg 53jpg 61jpg 6jpg 78jpg 86jpg 94jpg f3tsv
13jpg 21jpg 2jpg 38jpg 46jpg 54jpg 62jpg 70jpg 79jpg 87jpg 95jpg f4tsv
14jpg 22jpg 30jpg 39jpg 47jpg 55jpg 63jpg 71jpg 7jpg 88jpg 96jpg f5tsv
15jpg 23jpg 31jpg 3jpg 48jpg 56jpg 64jpg 72jpg 80jpg 89jpg 97jpg f6tsv
16jpg 24jpg 32jpg 40jpg 49jpg 57jpg 65jpg 73jpg 81jpg 8jpg 98jpg f7tsv
我们建三张表,分别用 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 (000 sec)
mysql> show create table tt_image2G
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 (000 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 (000 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/mysqldsock -e "insert into ytttt_image1(image_file)
values (load_file('/var/lib/mysql-files/$ijpg'))";done;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqldsock -e "insert into ytttt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$ijpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytttt_image3(image_file) values
('/var/lib/mysql-files/$ijpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqldsock -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 (000 sec)看下文件大小,可以看到实际大小排名,LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储路径的表 tt_image3。所以这里从存储空间来看,存放路径最占优势。
root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image274603 11G -rw-r----- 1 mysql mysql 11G Jul 11 07:27 tt_image2ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1ibd274605 80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3ibd那么怎么把取出来呢?
tt_image3 肯定是最容易的
mysql> select from tt_image3;+----+----------------------------+| id | image_file |+----+----------------------------+| 1 | /var/lib/mysql-files/1jpg |+----+----------------------------+100 rows in set (000 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> BEGIN DECLARE i,cnt INT DEFAULT 0; SELECT COUNT() FROM tt_image1 WHERE 1 INTO cnt; WHILE i < cnt DO SET @stmt = CONCAT('select image_file from tt_image1 limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'jpg'''); PREPARE s1 FROM @stmt; EXECUTE s1; DROP PREPARE s1; SET i = i + 1; END WHILE; END$$mysql> DELIMITER ;mysql> call sp_get_image;tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可。
总结
这里我举了个用 MySQL 来存放的例子,总的来说有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取 *** 作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
数据库系统,是由数据库及其管理软件组成的系统。数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。
1、使用streamreader得到txt文件中所有行;
2、你例举的数据后面有分号,那就截掉,如果没有,略过这一步;
3、使用空格分割得到的一行数据,得到每个属性对应的值;
4、连接数据库,将值按对应的属性存到对应的表中;
5、重复第2、3、4步,处理完所有的行,收工。
也可以得到的数据转为强类型列表,然后循环或遍历列表并保存到数据库;还可以处理完数据后再连接数据库,批量添加一次性全部搞定
基本就是这样,希望对你有帮助,有疑问请追问或是hi
外部文件到数据库的表叫ORACLE专属格式文件。RACLE外部表用来存取数据库以外的文本文件(TextFile)或ORACLE专属格式文件。因此,建立外部表时不会产生段、区、数据块等存储结构,只有与表相关的定义放在数据字典中。外部表,顾名思义,存储在数据库外面的表。当存取时才能从ORACLE专属格式文件中取得数据,外部表仅供查询,不能对外部表的内容进行修改(INSERT、UPDATE、DELETE *** 作)。不能对外部表建立索引。因为创建索引就意味着要存在对应的索引记录。而外部表其实在没有存储在数据库中。故在外部是无法建立索引的。如果硬要建立的话,则系统会提示 *** 作在外部组织表上不受支持的错误提示。
大象词典软件为您提供了完善了泰语词汇查询功能,您可以使用此app免费的学习泰语,并且软件内置简体中文,支持普通话和广东话发声,是您学习泰语必不可少的一个手机应用!大象词典app简介这部词典,很多留学生都会使用,是一款还蛮好用的泰语词典软件哦,有朗读功能,可以帮助你更好地学习泰文。
比如你输入一个"高"字,下面就会出现很多关于"高"字的词语和解释,点击详情进去还有朗读功能哦~大象词典安卓版特色使用软件无须上网显示一字多音之功能泰文、中文和广东话母语发音可用中文、拼音、粤拼和泰文搜索全部词汇均由母语者翻译应用特点1。
多种格式搜索单词,选择与多种键盘配合使用。帮助过滤单词以快速找到它们2。显示简体中文字符中文(简体),繁体中文中文(繁体)、拼音和拼音3。您可以选择听母语人士录制的音频中的泰语、汉语和粤语词汇。
4。所有单词都在应用程序本身中。可以继续旅行无需互联网连接5。有搜索历史记录。6。字体可调整为3种大小,方便阅读。7。直接从母语人士翻译产生与每种语言的真实含义相匹配的翻译不使用来自互联网的信息或现成的程序软件功能在搜索单词的过程中无需连接网络。
收集多达200,000个在教学上有必用到的生词。可以通过打入泰文、拼音、简体字和繁体字还进行搜索。可以通过轻轻一按就互换简体-繁体。收集喜欢的单词以稍后观看。随着使用者的需求来调整文字的大小。
显示出各种词语的分类和句子。可以把单词通过各种软件来分享给朋友,或者收集为单词卡片以方便浏览。可以复制单词以用到其他事情上。显示出最近搜索单词和保存所有搜索记录。在线学习平台,为了学习汉语而用,比如泰语故事和汉语故事、具有泰语翻译的汉语歌曲视频、各种泰国-中国新闻、等等。
普通话和广东话的发音。所有单词是通过语言主人的直接翻译,导致得到与每种语言相同意思的翻译解释,并没有使用网络或其他软件的资料。屏幕可以随意横竖旋转。应用亮点此软件可以无限的接连单词,当使用者搜索单词时,此软件将显示出所单词的意思,然后使用者可以点击该单词意思以让软件继续为你搜索其他有相同和相似解释的更多单词。
我们可以继续这样无限地点击,以及可以点返回和前进,而软件将在解释栏的上面显示出按钮包括文字。新功能-在数据库中添加和编辑单词。
以上就是关于学习怎样把视频文件存储到mysql数据库全部的内容,包括:学习怎样把视频文件存储到mysql数据库、在数据库中存储的是什么(数据库里存储的是什么)、能否用存储过程读取txt文件并将文件内容保存到数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)