早上继续看mongodb文档,利用早餐、交电话费、逛超市的碎片时间看了两个小东东:GridFS和mapreduce。
1、GridFS
GridFS是mongodb的分布式文件系统,可以充分利用分片和副本集的优势,善设shard key,还是不错的。
我想的shard key 是文件名,或者{类别,文件名},没细想,有了经验再细考量。对于创建日期有些犹豫,细节还不了解,应该是有价值的,还不知道怎么用。
以下凭记忆乱写,未必正确。
GridFS用两类集合保存文件,一个是db.files,保存文件元信息,和普通的集合没关系。一类是db.chunks,保存文件本身,每个chunk 20G。
对于大文件,驱动程序负责分割(需要自己写代码干预吗?看Java API文档时记着这个事情),每个文档受4M限制(新版本会扩大吧,反正再大也是不太大)。
客户端,比如Java可以建立连接,直接保存文件到mongodb,和保存普通文档从语法上区别不大。
常规操作包括:put、get、list、search。
有md5字段,可以验证文件完整性。
大概这些,感觉存小图片啥的还可以,正经存文件还是hdfs吧。当然,存海量小文件也功德无量。再想想shard和replset,也非常高大上。
2、MapReduce in MongoDB
这个也是个太监版,初步具备了象征意义。
输入方面,需要将BSON转换为JavaScript对象,额滴神啊,想想都觉得慢。
在map之前可以order by ,limit,query过滤,然后map ,emit,reduce,最后finalize。
结果集依托Connection是暂时的,可以持久保存。
JavaScript语法清晰简单。
继续看的话,找找Job、Task调度的内容。分片机制按照shard key将数据分片存储,计算的输入如果在某个分片上,map是不是也运行在那个分片上呢?
接下来还有几块内容没看:
管理角度:监控、备份;
开发角度:索引、查询。