当前位置: 技术问答>java相关
[讨论] 我看www.csdn.net。问题2:大家把大对象放在哪里?有感于满论坛的“怎么操作Blob”以及CSDN上面很多的404 Not Found
来源: 互联网 发布时间:2015-07-21
本文导语: 内容管理(Content Manager)是一个当今的热门话题。当RDB已经很好的解决了结构化数据的存贮需求,对于如果存储管理占据数据存储90%以上的非结构化的数据,例如HTML(15TB),Internet上的其他文件(100TB),硬盘上的(1000P...
内容管理(Content Manager)是一个当今的热门话题。当RDB已经很好的解决了结构化数据的存贮需求,对于如果存储管理占据数据存储90%以上的非结构化的数据,例如HTML(15TB),Internet上的其他文件(100TB),硬盘上的(1000PB),存储设备上的(20EB),模拟信息(300EB),却一直没有得到很好的解决。
注数据来源于Almaden(1998)
我日前去看了中国国际数字化公众信息服务与技术展览会,糟糕的很,硬件厂商,系统集成商,等等很多各种企业和公司在做一些和论题无关的东西,很多厂商把网站制作系统也搬来了(没有软件厂商)。因为公共信息服务对内容要求很高,但这个展览却体现出这个市场的混乱。这足以证明至少在这个领域,内容管理是个模糊不清的概念,是不受重视的。
我感兴趣的是,对于各位来说,大家平时都是怎么存储大对象的?怎么去管理这些对象,怎么去维护大对象之间的关系?
方案1:使用数据库Blob,Clob等字段。
优点,数据一致性好,结构清晰。但是缺点太严重:结构不易扩充,严重影响数据库效率等等。这已经是一个绝对不可以使用的方案了,只能放弃。
方案2:使用文件系统+RDB。
这大概是现在用的最多的方法了。我希望能和大家讨论的也主要在这里。
这样的系统一般不会有性能问题,但是数据的一致性、完整性却难以维持。
例如我去展览会的时候有个公司是做网站系统的,对于网页上的图片他们是采用上传的方式,而且和正文一样被放在文件系统中。但是如果正文被删除,图片却被留在了文件系统……这样的例子很多。
拿CSDN为例,CSDN的帖子正文数据库中一份(varchar 8000?),文件系统一份(就是大家看到的XML)。大家浏览的时候也都遇到过404 Not Found的错误。我不想讨论CSDN,大家来说说,各位在做这种工作时怎么维护数据的一致性和完整性?怎么处理异常?怎么去管理数据?
注数据来源于Almaden(1998)
我日前去看了中国国际数字化公众信息服务与技术展览会,糟糕的很,硬件厂商,系统集成商,等等很多各种企业和公司在做一些和论题无关的东西,很多厂商把网站制作系统也搬来了(没有软件厂商)。因为公共信息服务对内容要求很高,但这个展览却体现出这个市场的混乱。这足以证明至少在这个领域,内容管理是个模糊不清的概念,是不受重视的。
我感兴趣的是,对于各位来说,大家平时都是怎么存储大对象的?怎么去管理这些对象,怎么去维护大对象之间的关系?
方案1:使用数据库Blob,Clob等字段。
优点,数据一致性好,结构清晰。但是缺点太严重:结构不易扩充,严重影响数据库效率等等。这已经是一个绝对不可以使用的方案了,只能放弃。
方案2:使用文件系统+RDB。
这大概是现在用的最多的方法了。我希望能和大家讨论的也主要在这里。
这样的系统一般不会有性能问题,但是数据的一致性、完整性却难以维持。
例如我去展览会的时候有个公司是做网站系统的,对于网页上的图片他们是采用上传的方式,而且和正文一样被放在文件系统中。但是如果正文被删除,图片却被留在了文件系统……这样的例子很多。
拿CSDN为例,CSDN的帖子正文数据库中一份(varchar 8000?),文件系统一份(就是大家看到的XML)。大家浏览的时候也都遇到过404 Not Found的错误。我不想讨论CSDN,大家来说说,各位在做这种工作时怎么维护数据的一致性和完整性?怎么处理异常?怎么去管理数据?
|
when I'm at work. I only have english. only have win2k at my home pc.
if add file, really don't think garbage file is a big issue. even db has to do automatic recovery to cleanup garbage at power outage. you can run maintenance job to clean those garbage file up.
yes, my approach requires big transaction, that's not necessary.
just
create file
delete and return if fail
begin tran
update db
rollback delete file and return if fail
commit tran.
for update file, that's a big headache.
maybe we can do this:
create file
delete file and return if fail
begin tran
update db with the new file name
delete file rollback and return if fail
commit
delete the old file
if add file, really don't think garbage file is a big issue. even db has to do automatic recovery to cleanup garbage at power outage. you can run maintenance job to clean those garbage file up.
yes, my approach requires big transaction, that's not necessary.
just
create file
delete and return if fail
begin tran
update db
rollback delete file and return if fail
commit tran.
for update file, that's a big headache.
maybe we can do this:
create file
delete file and return if fail
begin tran
update db with the new file name
delete file rollback and return if fail
commit
delete the old file
|
to leonzhao(灯泡):
因为这是一个很便宜的方案,我们做,拿到的不到2人月。所以我认为这是这个设计的优点。
哪个公司真的就不方便说了,请谅解。
regards
T.
因为这是一个很便宜的方案,我们做,拿到的不到2人月。所以我认为这是这个设计的优点。
哪个公司真的就不方便说了,请谅解。
regards
T.
|
这个问题好象还没有很好的解决办法,数据一致性的问题肯定会存在.
不过话说回来,如果没有这样的问题,还要系统管理员做什么啊!?
当然如果能根据这样的系统做一个特定的事务到是不错,也就是说,RDB中有该文件的记录文件不能删,文件存在,RDB中的数据也不能删,但真的要这样的话,恐怕只有MS做的出,因为只有他们才有自己的OS呀!
大家说说看有什么好方法能保持数据完整性!?
不过话说回来,如果没有这样的问题,还要系统管理员做什么啊!?
当然如果能根据这样的系统做一个特定的事务到是不错,也就是说,RDB中有该文件的记录文件不能删,文件存在,RDB中的数据也不能删,但真的要这样的话,恐怕只有MS做的出,因为只有他们才有自己的OS呀!
大家说说看有什么好方法能保持数据完整性!?
|
对于数据库的事务处理是没有问题的,主要是文件的问题。
先执行增加记录,然后上传文件。
开始数据库的事务;
新增加RECORD;
if 失败
{
回滚;
return;
}
commit;
存储文件;
(可能要很长时间,或断电)
if 失败
{
return;
}
1.如果记录保存不成功,文件上传也不会成功。(这种情况是正常的)
2.如果记录保存成功,而可能文件没有上传成功。(这种情况也可能发生)
3.如果记录保存不成功,而可能文件上传成功。(这种情况好象以上代码不可能发生)
4.如果记录保存成功,文件上传成功。(这种情况是正常的)
由此针对第2种情况,记录被保存,而文件没有上传,所以只要删除记录就可以了,怎么去确定哪些记录的文件没有上传成功呢?可以用以数据表中记录去遍历文件名,如果文件不存在,则删除该记录。
不知以上分析有没有问题,帮忙分析并指出。
先执行增加记录,然后上传文件。
开始数据库的事务;
新增加RECORD;
if 失败
{
回滚;
return;
}
commit;
存储文件;
(可能要很长时间,或断电)
if 失败
{
return;
}
1.如果记录保存不成功,文件上传也不会成功。(这种情况是正常的)
2.如果记录保存成功,而可能文件没有上传成功。(这种情况也可能发生)
3.如果记录保存不成功,而可能文件上传成功。(这种情况好象以上代码不可能发生)
4.如果记录保存成功,文件上传成功。(这种情况是正常的)
由此针对第2种情况,记录被保存,而文件没有上传,所以只要删除记录就可以了,怎么去确定哪些记录的文件没有上传成功呢?可以用以数据表中记录去遍历文件名,如果文件不存在,则删除该记录。
不知以上分析有没有问题,帮忙分析并指出。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。