报表的数据组织:文件还是数据库?

在报表开发项目中,报表的源数据可以放置在数据库中,也可以放在文件里。比如,一个互联网公司的网站运营报表系统,公司注册用户的基本信息来自于网站系统,使用的是Oracle数据库;用户操作数据来自于网站系统的日志文件,是文本文件。一般的做法是将用户操作数据从文本文件中导入到Oracle中,再用SQL语句去提取和计算数据。

那么,将报表的数据全部放到数据库中是否是最佳做法?可不可以把报表的数据全部或者部分放到文件系统中呢?这两种做法各有什么优缺点呢?

这里我们比较一下,报表工具结合Java程序访问数据文件(简称:文件报表),和报表工具直接访问关系数据库(简称:数据库报表)在几个方面的不同支持。其中,Java程序用来进行报表的源数据计算。

一、数据读取速度

报表应用是一个读数据、进行计算、页面展现的过程。从数据读取角度,文件是直接从操作系统来读,速度取决于硬盘的io速度。数据库则需要通过jdbc来读取,因为需要做数据流的对象转换,当前业界主流数据库的jdbc都比较慢。这是一个始终没有解决的问题。

这方面,文件报表可以得5分,数据库报表得3分。

二、数据计算性能

从计算角度来看,简单sql语句执行的速度较快,复杂sql不容易优化。如果是存储过程中用for循环来fetch计算的话有可能要比java慢。

这方面,两者都得3分。

三、数据一致性

关系型数据库有元数据(描述数据结构的数据字典),还有事务管理,数据随机写入的一致性可以保证的很好,当然这样做也牺牲了一部分性能。但是,在报表应用当中,数据的读操作较多,写操作一般也是顺序写入,所以对数据一致性要求并不高。

这方面,文件报表得3分,数据库报表得5分。

四、易管理

文件可以按照业务种类、模块关系、时间顺序进行多级目录管理,可管理性较高。而数据库是扁平结构,不能以多级目录的形式来管理数据,只适合管理数量较少的表。数据库中很容易形成大量意义混淆的表名,可管理性较差。

这方面,文件报表得5分,数据库报表得3分。

五、易开发

简单sql比较容易写,但是复杂Sql和存储过程与java都很难写。Sql的问题在于:不支持分步计算、集合化不彻底、缺乏有序集合、不支持对象引用。这就造成复杂sql和存储过程不符合自然思维习惯,编程比较困难。Java则不提供关系运算的基本类库,类似group这样的运算都要程序员自己编写,编程更不容易。

这方面,文件报表只能得1分,数据库报表可以得3分。

六、低成本

数据放在文件中的综合成本要远远低于数据库。这方面,报表文件得5分,数据库得1分。

七、扩展性

在数据存储上,数据文件更容易扩展。特别是有了hdfs之后,文件系统非常容易横向扩展。数据库集群横向扩展的技术较为复杂,配置、维护困难,成本也高。

这方面,文件报表得5分,数据库报表得2分。

八、安全性

数据库具有私有的数据存储方式,即使有了操作系统权限,外部系统也只能通过数据库提供的安全通道来存取数据。数据文件则暴露在操作系统用户下,必须要严格管理操作系统用户权限才能保证安全。

这方面,文件报表得3分,数据库报表得5分。

总体来看,文件报表和数据库报表的各方面比较如下图:

从上面的图可见,对于报表应用,总体上说,使用文件来组织数据比数据库略有优势。文件报表之所以也有些短板,并不是文件系统本身的问题,而是开发语言Java的问题。其中最明显的短板是Java针对报表数据源计算的开发困难,计算能力较差。

如果采用润乾公司最新的集算报表,配合文件存储数据的方案,与其它报表工具加数据库存储的方案相比较,优势就非常明显了。

集算报表内置了数据计算引擎集算器(esProc),可以非常方便的访问文件数据。下面我们比较一下集算报表+文件存储方案(简称集算报表方案)与其他报表工具+数据库报表(简称其他报表方案)的各方面情况。

  • 数据读取速度

集算报表调用集算器读取数据文件,经过计算之后,通过集算器Jdbc接口提供给集算报表,因为集算器也是基于Java的,所以集算器的Jdbc不需要再做数据流的对象转换,要比传统数据库快很多。

这方面集算器报表方案可以得5分。

  • 数据计算性能

集算报表和集算器都是基于Java开发的,集算器单进程运行的时候没有传统数据库计算速度快。如果使用集算报表调用集算器的单机多线程机制或者多机并行机制来实现分布式计算的话,速度要超过传统数据库。详细的测试数据参见集算器有关的测试报告。

这方面集算报表方案可以得5分。

  • 数据一致性

集算报表对文件的访问可以全部通过集算器来实现,通过集算器的代码将数据文件封装起来,可以在一定程度上保证数据的一致性。因为报表的计算都是读取和分析数据,所以集算器并不提供事务管理功能,好处是在读取和顺序写入数据的场合更有性能优势,缺点是数据一致性比数据库稍差。

这方面集算报表方案可以得3分。

  • 易管理

在集算报表的文件数据源中,数据文件是天然支持多级目录的,所以复制、转移、拆分都比数据库简单高效得多,这就允许用户按照业务模块、时间顺序等规则分类管理数据,应用程序下线时,也可以按照目录删除该应用对应的数据。数据管理因此变得简单清晰,工作量显著降低。

这方面集算报表方案可以得5分。

  • 易开发

集算报表内置的集算器是结构化半结构化数据计算的专业开发语言,具有:分步计算、完全的集合运算、有序集合运算和对象引用机制,更接近自然思维,编程更简单,代码量更少。集算器提供丰富的内置对象和库函数,可以实现复杂的业务逻辑,与sql相比,能降低从业务逻辑到程序代码的转换门槛。

这方面集算报表方案可以得5分。

  • 低成本

集算报表售价比数据库要低很多。同时,集算报表对软硬件环境的要求也比数据库低很多,一般的报表项目都不必购买专用的数据存储设备和相应的授权就能使用,它支持Windows/Linux/Unix,既支持中高端服务器也支持廉价PC。因此集算报表综合成本远远低于数据库。

这方面集算报表方案可以得3分。

  • 扩展性

在数据存储上,数据文件更容易扩展。

在计算方面,集算报表可以通过集算器的高级版本实现强大的分布计算管理功能:分布式计算引擎、可控任务分配、节点选择与容错、节点内数据共享、节点间数据交换,可以根据任务特点平衡容错与性能。

这方面,集算器报表方案得5分。

  • 安全性

集算报表可以调用集算器的高级版本,提供独立的服务器,如果将集算服务器和集算报表安装在不同的物理服务器上,集算服务器对外只开放特定端口号,那么数据安全性可以得到有效的保障。

集算器要自行编程实现登录和权限管理,相对数据库有一定工作量,但是也更灵活。

这方面集算报表方案可以得4分。

集算报表方案和其他报表方案之间各项比较如下图:

从上图可见,在报表项目当中,集算报表+文件的方案的优势比较明显,在相当多的场合可以替代其他报表工具+数据库的传统方案,特别是以历史数据为主要来源的报表项目,数据量大需要更强的扩展性和计算性能,但对数据一致性和安全性要求要低得多。

事实上,集算报表并非只能支持文件数据源,它对数据库数据源仍然有相当好的支持,这样我们也可以考虑将数据库和文件系统结合起来为集算报表提供数据源,从而达到最佳的效果。其中,数据库存放变动较大的最新数据,文件系统存放变动较小的历史数据。如下图:

最新的数据量不大,但是变动比较频繁,对数据一致性要求比较高,放在数据库中既可以保证数据一致性,又不会对数据库负载增加过大的压力。历史数据量较大,变动较少,可以充分发挥文件系统的优势。这种解决方案,可以获得文件数据源和数据库数据源的双重好处,在上述的各方面都能达到5分。

报表的数据组织:文件还是数据库?,布布扣,bubuko.com

时间: 2024-10-13 22:49:34

报表的数据组织:文件还是数据库?的相关文章

上传文件至数据库并下载

在FineReport中,会出现希望直接将txt.excel等文件整个保存在数据库中进行备份,并且希望通过FineReport制作报表将这些文件下载下来的情况. 上传:使用文件控件上传文件,以二进制流保存至数据库字段中(字段类型必须是用于保存二进制数据的): 下载:直接将二进制数据拖入单元格,设置单元格的其他属性>用下载链接显示二进制内容,就可以下载文件. 下面通过上传一个txt文件至sql server数据库中并下载为例来说明实现过程.Sqlite数据库仅支持上传,不支持下载的. 前提准备 准

运用PDO存储将图片、音频文件存入数据库

在数据库中创建表格的时候,有一个字段为image,用来保存图片,那么其类型就是blob,关于blob,百度百科是这样描述的 BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传.下载或者存放到一个数据库). 根据Eric Raymond的说法,处理BLOB的主要思想就是

为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0

为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0? 答:NTFS删除一个文件,必须要完成如下几个流程,才算完结: 1.更改文件系统$bitmap,释放空间 2.更改$mft filerecord项的属性为删除 3.更改$mft:$bitmap的位图信息为0,释放这个filerecord的占用空间 4.清除目录链表中关于本文件的item信息. 这个流程是理想状态下的处理规则,但实际上,最头疼的是OS要考虑这个问题:如果在上述4个步骤中出现中断(如突然断电.死机等),

相克军_Oracle体系_随堂笔记016-参数文件及数据库的启动和关闭

参数文件: spfile<SID>.ora    动态参数文件,是二进制文件,9i以后引入并建议使用 init<SID>.ora    静态参数文件,是文本文件 动态参数,部分参数可以动态修改.建议9i以后就使用spfile. 数据库启动三个阶段: nomount(根据参数文件配置参数启动实例) mount(根据参数文件中记录的控制文件位置打开控制文件) open(根据控制文件信息打开数据文件,redo日志文件,open数据库) 注:nomount之前就可以根据pfile创建spf

卸载exchange server 2010过程中,无法删除公共文件夹数据库

如果您的企业Exchange Server 只有一台,这时公共文件夹也在这台上边,而这时你再删除时,将发现报错了,不让删除.   此时,在"公共文件夹数据库"的属性中已经不见"数据库副本转移"的界面了,因为只有一台嘛. 这时如何解决呢?可以通过ADSI编辑器删除,方法如下: 在ADSI编辑器中,定位至如下位置: CN=Configuration,DC=Doubi,DC=ren   CN=Services  CN=Microsoft Exchange  CN=EXCH

SQLServer2008R2 mdf文件还原数据库

偶然遇到要用mdf文件restore数据库,试了2个小时才弄出来,百度查出来的我试了都不太好用,或者是我没理解. 下面把我用的记录一下,以防忘记. 工具:SQLServer 2008R2 步骤: 1.创建一个与mdf文件同名的数据库 2.将新创建的数据库宕机(detach), 3.在数据库文件中找到对应的数据库文集和对应的log文集,删除. 4.将需要还原的文件复制到对应的目录下. 5.将该文件attach到数据库上. 6.OK了.

mysql通过data文件恢复数据库的方式

1.首先定位mysql的my.ini配置文件,查找datadir的位置 #Path to the database rootdatadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" 一般情况下,该文件夹是隐藏,需要显示所有文件. 2.将data目录下的文件拷贝至datadir.重启启动数据库即可 net start mysql mysql通过data文件恢复数据库的方式,布布扣,bubuko.com

PowerDesigner中SQL文件、数据库表反向生成PDM

1      反向生成PDM 1)        创建一个空的PDM模型(选择对应的DBMS): 2)        选择[Database]--[Update Model from Database-]菜单: 1.1    使用SQL文件 1)        在新窗口选择对应[Using script files]--[(Add Files)].然后再弹出窗口选择对应的SQL文件.点击打开,完成选择. 2)        点击[确定]生成. 1.2    使用数据源 1)        选择数

【DRP】采用dom4j完成XML文件导入数据库

xml文件在现在的web开发中扮演着重要的角色,从数据库连接配置到其他各种参数的设置,xml文件在反射技术的应用中举足轻重,也正因为xml文件中保存着如此重要的参数,所以对xml文件的读写操作就显得更加重要.下面我们重点讲解一下dom4j完成XML文件导入数据库. 0.带读取的xml文件如下: 1.利用PL/SQL导入SQL脚本,建立Oracle数据库表(表T_XML)结构,用于接收xml导入的数据 2.按照下图,建立目录并导入相应文件 通过引入的相关jar包,实现dom4j技术解析xml文件(