博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinking about application known or un-known distributed storage
阅读量:6952 次
发布时间:2019-06-27

本文共 1034 字,大约阅读时间需要 3 分钟。

最近有个资源整合的项目,存储的话选择了mongodb的sharding来做,因为数据量较大。

原本可能会选择Hadoop来做的,不过从Hadoop的文档上看到好像不太适用大并发的小IO的操作(小文件),更加适用大吞吐量小并发的操作(大文件)。

应用要求多IDC部署,因此资源文件也要求在多IDC存储(相当于每个IDC需要有同样的资源文件)。

考虑到扩展性,在一个IDC内部使用了mongoDB的sharding特性。

但是这样带来一个问题,不方便复制到其他的IDC,所以目前的做法是应用层在写入文件存储的时候同时调用远端IDC的应用写入文件到远端IDC的mongoDB sharding。

thinking about application known or un-known distributed storage - 德哥@Digoal - The Heart,The World.


。这样做的好处是单个IDC的文件存储扩展变得比较灵活,不过又带来一些问题,由于SHARDING是mongoDB来做的,可能不能做到就近存储(比如存进去的资源,需要读取这个资源的应用和存储的位置应该最近,这样的话才是最优的。针对write-once-read-some型应用。)

还一个问题是,可能出现一个IDC文件资源存储成功了,另一个IDC的文件资源没有存储成功的情况,同时也是应用需要考虑来解决的问题。


所以最近我也在考虑是否有其他的解决方案,即能够做到分布存储,又可以让文件存储来做多IDC复制,例如mongoDB的master-slave。

例如

IDC A : (读写)

增加一个PostgreSQL,用于存储文件存放的位置,

如:

idc_id,file_name,mongodb_hostname,mongodb_namespace

当文件被写入到mongodb时,同时写入记录到PostgreSQL,这样的话如果一个mongoDB不够了,可以加mongoDB服务器,

如果一台PostgreSQL数据库不够用,甚至还可以对FILE_NAME进行HASH分区,使用多台PostgreSQL来堆。

当文件被读取时,先到PostgreSQL读取到文件存放的位置,然后到mongoDB读取。


IDC B:  (只读)

利用PostgreSQL的复制功能和mongoDB的复制功能复制IDC A的数据到IDC B。IDC B只提供读取功能,所有的写在IDC A完成。


如图 :
 

thinking about application known or un-known distributed storage - 德哥@Digoal - The Heart,The World.
 

这样做的好处是在应用部署时会比较灵活,解决了就近存储的问题。同时也简化了应用设计,不需要应用来处理写多个IDC的问题。

当然,两种方式都可能使得IDC A 和IDC B在短时间内有一定的数据延时。

转载地址:http://nsyil.baihongyu.com/

你可能感兴趣的文章
【高德地图API】从零开始学高德JS API(五)路线规划——驾车|公交|步行
查看>>
LINUX中nagios客户端安装步骤及遇到问题
查看>>
CentOS6.7系统优化加强牢固脚本
查看>>
nofollow是什么意思?nofollow标签的写法和作用
查看>>
MySQL常用命令收录
查看>>
SQL 删除数据-select在当前表字段作为条件
查看>>
nike roshe run homme pas cher
查看>>
webrtc研究资源摘录
查看>>
.Net Micro Framework移植基础(包编译通过)
查看>>
对象和实例的区别
查看>>
关于MARATHON和容器的端口映射
查看>>
php通过header发送自定义数据
查看>>
云时代必备 CDN 技能包
查看>>
仿大众点评下拉菜单实现
查看>>
数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
查看>>
hadoop 开发环境设置以及可运行jar包生成
查看>>
MySQL 备份恢复
查看>>
intellij idea修改背景色以及快捷键大全
查看>>
Can't connect to X11 window server using 'localhos
查看>>
redis 介绍与安装
查看>>