84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
欢迎选择我的课程,让我们一起见证您的进步~~
文件内容当然不能存在关系型数据库里。但是你可以把文件的元数据比如原始的文件名,创建者,描述,关键字等,以及文件实际存储信息存在数据库,方便查询。如果数据量不是很大(G级别以下),文件不是特别零碎,可以直接存在硬盘上。但是如果数据量已经/可能超过T级别,或者文件小且零碎,建议还是放在HDFS等分布式文件系统上。
我存储爬虫的html以及图片数据,是通过HDFS的MapFile格式存储的。MapFile是个已排序的键值对文件格式,我的键采用的是url的hash+采集时间,值就是文件内容。并且封装了原生的MapFile.Reader实现了读取和一定程度的缓存(目前只用了LRU)。
在HDFS提倡一次写入,多次读取的前提下,文件的更新只能是通过失效旧,使用新的策略。即把旧的元数据标记为失效,插入新的元数据,并把更新的文件写入HDFS。读取是通过新的元数据定位到文件。同时,要定期的清除已失效的文件,即把未失效的元数据读出来,将对应的文件写到新的MapFile,删除旧的MapFile,即可实现物理删除。
当然还可以使用HBase。HBase是面向列的,二进制存储的,可横向拓展的NoSQL。可以把不大于64M的数据作为单元格数据直接写进去。但是有一定的学习成本,而且对集群的硬件要求比较高。
如果数据量很大,可以上HDFS以及其他分布式文件系统,例如淘宝的TFS(开源了但是文档超少)等。不大就直接存在硬盘上。关系型数据库可以用来存文件的元数据,比如原始的文件名,创建者,描述,关键字等,以及在实际存储的相关信息。例如我通过HDFS的MapFile文件格式存储海量的html文件以及图片,通过文件路径(hdfs://xxxx)加上对应的hash键就可以快速的把文件读出来。如果要更新(我这里没有这个应用场景),只需把旧的元数据标记为失效,插入新的元数据。定期整理文件即可。
GridFS
文件内容当然不能存在关系型数据库里。但是你可以把文件的元数据比如原始的文件名,创建者,描述,关键字等,以及文件实际存储信息存在数据库,方便查询。
如果数据量不是很大(G级别以下),文件不是特别零碎,可以直接存在硬盘上。
但是如果数据量已经/可能超过T级别,或者文件小且零碎,建议还是放在HDFS等分布式文件系统上。
我存储爬虫的html以及图片数据,是通过HDFS的MapFile格式存储的。MapFile是个已排序的键值对文件格式,我的键采用的是url的hash+采集时间,值就是文件内容。并且封装了原生的MapFile.Reader实现了读取和一定程度的缓存(目前只用了LRU)。
在HDFS提倡一次写入,多次读取的前提下,文件的更新只能是通过失效旧,使用新的策略。即把旧的元数据标记为失效,插入新的元数据,并把更新的文件写入HDFS。读取是通过新的元数据定位到文件。同时,要定期的清除已失效的文件,即把未失效的元数据读出来,将对应的文件写到新的MapFile,删除旧的MapFile,即可实现物理删除。
当然还可以使用HBase。HBase是面向列的,二进制存储的,可横向拓展的NoSQL。可以把不大于64M的数据作为单元格数据直接写进去。但是有一定的学习成本,而且对集群的硬件要求比较高。
如果数据量很大,可以上HDFS以及其他分布式文件系统,例如淘宝的TFS(开源了但是文档超少)等。不大就直接存在硬盘上。关系型数据库可以用来存文件的元数据,比如原始的文件名,创建者,描述,关键字等,以及在实际存储的相关信息。例如我通过HDFS的MapFile文件格式存储海量的html文件以及图片,通过文件路径(hdfs://xxxx)加上对应的hash键就可以快速的把文件读出来。如果要更新(我这里没有这个应用场景),只需把旧的元数据标记为失效,插入新的元数据。定期整理文件即可。GridFS