让文件具有计算能力

         让文件具有计算能力,可以减轻数据库吞吐瓶颈、降低数据库成本、降低数据库扩容压力、使数据更易于管理。

         有很多数据库之外的文件都蕴含着结构化数据,比如:文本文件、Excel文件、日志文件、二进制文件。为了在应用程序中使用这些结构化数据,一般的作法是先把它们导入数据库,利用数据库的接口计算数据并获得结果。

         但是,将文件导入数据库再计算,会产生如下不便:

         额外的工作量。将文件导入库内,通常要额外进行ETL开发工作。很多时候,我们还要处理增量数据、实现定时调度、开发存储过程、设置数据库权限,工作量进一步加大。

         加大了数据库吞吐负担。有些文件的数据量很大,比如网站日志。导入数据库后,这些数据占用昂贵的数据库存储空间、数据库License、CPU资源、网络IO,加大了数据库的吞吐负担。

         推进了数据库扩容。更多的数据加大了数据库的吞吐负担,就会加速数据库的扩容 ,用户不得不经常升级扩容,购买昂贵的专用存储设备、数据库License、服务器CPU。有时候,仅仅扩容还不够,还需要购买更高档的数据库专用服务器。

         数据的可管理性变差。文件可以按照业务种类、模块关系、时间顺序进行多级目录管理,可管理性较高。而数据库是扁平结构,不能以多级目录的形式来管理数据,只适合管理数量较少的表。有时,导入的数据种类多、数量大、命名随意,在数据库中很容易形成大量意义混淆的表名,长此以往,数据库中会积累大量意义不明但又不敢删除的顽固数据,可管理性反而变差。

 

         文件入库的缺点这么多,为什么还要入库?这是因为文件本身缺乏计算能力,为了获得计算能力,我们不得不将它入库,并承受由此带来的不便。可以看到,如果使文件具有计算能力,这些不便都会消失,我们甚至还能将库内原有的冗余数据也导出成库外文件,带来更大的便利!

         数据库中有两类数据,核心的业务数据,以及由此派生出的面向具体应用的冗余数据(如为了提高性能和方便查询事先汇总的数据)。数据库建设初期,以核心数据为主。但随着业务的发展,冗余数据不论在量级和增速上都会大大超过核心数据。核心数据的安全性要求高,数量少,有必要放进昂贵的数据库存储空间。冗余数据衍生自核心数据,它的安全要求不高,一旦损坏也可以通过核心数据重新生成,因此没有必要放进数据库中。之所以要把冗余数据放在数据库中,不是为了安全性,这同样是为了让冗余数据获得计算能力。

         由于数据量大、关联的应用多,冗余数据消耗了数据库的绝大部分资源,对数据库的吞吐瓶颈影响更大,扩容时所要付出的成本也更多,可管理性也会更差。

 

         总结一下,如果我们使文件拥有计算能力,我们将获得这些好处:

         没有额外的工作量。对于库外文件,我们可以直接读取并计算,不必再导入数据库,额外的ETL的工作量减少到零。

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

成本低廉。既然是文件,那就可以简单地存储在廉价硬盘中,无需购买昂贵的数据库专用软硬件。

降低数据库吞吐负担。将数量最大,应用最多的冗余数据移到库外,数据库的性能自然会明显提高,吞吐负担随之减低。

降低数据库扩容压力。数据库吞吐负担降低,就可以显著推迟扩容临界点的到来,数据库可以继续服役,也可以节省大量的扩容成本。

资源利用率高。用文件来存储数据并非要抛弃数据库,相反的,文件应当只存储安全要求不高、但数据量巨大的冗余数据以及库外文件,而数据库仍然存储核心数据。如此一来,文件存储和数据库存储各司其职,资源利用率显著提高。

整体性能显著提高。数据库是私有接口,通道拥挤;文件系统是开放接口,任何程序都能访问,性能的天花板更高。另外,文件可以方便地复制、分散在多台廉价PC上,这就可以使用多节点并行计算的方式来解决吞吐瓶颈,性能可以进一步大幅度提高。虽然数据库也有并行解决方案,但Teradata、Greenplum等方案非常昂贵,免费的Hive、Impala目前计算能力和成熟度还不高,难以普及使用。

 

文件计算的优势很多,但有一个关键的缺点,即文件本身没有计算能力,我们需要特定的工具才能让它具有库外计算能力。R语言、MapReduce、高级语言、集算器就是这样的工具,其中,集算器的综合优势较多,下面重点介绍一下。

自有引擎支持文件计算。集算器可以直接读取Txt文件、Excel文件、二进制文件中的结构化数据,从而轻松支持库外文件计算。集算器还可以直接访问各种关系型数据库、半结构化数据,可以轻松进行多数据源混合计算。

         内置丰富的计算函数。集算器是针对结构化数据计算的程序设计语言,提供了丰富的内置对象和库函数,可以实现复杂的业务逻辑,同时还能降低从业务逻辑到程序代码的转换门槛。比如,有序集合可以解决SQL\SP中的典型难题,包括相对位置访问、多级分组中的行间计算、复杂的排名计算。

         支持廉价横向扩展。集算器支持多节点并行计算,从而支持大文件库外计算,在保证高性能的同时可以有效降低成本。集算器还是个几乎免费的软件,不必购买专用的数据存储设备和相应的授权就能使用,它支持Windows/Linux/Unix,既支持中高端服务器也支持廉价PC,伸缩性比数据库更强。

         下面用一个例子来说明集算器进行文件计算的过程:某企业使用文件来存储历史数据和冗余数据,其中包括了历史订单数据;数据库用来存储核心数据和当期数据,包括当月的订单数据以及完整的客户信息。现在需要通过外部输入的商品列表来计算去年年初到目前为止,有多少客户购买了列表上的所有商品;计算完成后,需要将客户ID和客户名返回给报表工具。集算器代码如下:

A1-A3:从文件读取历史数据,从数据库取当月数据,并将两者合并。

A4-A5:按照时间和商品列表过滤订单,其中商品列表来自于外部(一般是报表工具)。需要注意的是,例子中假设数据量不大,因此采用了先合并再过滤的方式。如果实际数据量比较大,则应该采用先过滤再合并的方式;如果数据量进一步加大,则应当用文件游标分段读取分段计算方式;对于特别巨大的数据,可以采用多节点并行计算的方式。

A6-A10:计算出购买了相同产品的客户。由于同一个客户会购买同样的商品,因此需要将订单按客户分组,在每组中求得用户购买了哪些不重复的商品(相当于SQL中的distinct)。继续对不重复的商品计数,即可知道用户购买了几种商品。这个数量如果和商品列表一致,则表示该用户购买了列表中的所有商品。

A11-A12:从数据库取得完整的客户ID、客户名称,通过关联计算求出A10中客户ID所对应的客户名称。

A13:将计算结果返回给报表工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabVIEW是一种图形化编程语言,被广泛应用于数据分析、控制系统和实验室测试等领域。LabVIEW中的计算文件是一种用于执行基本数学计算的程序文件。下面详细介绍一下LabVIEW计算文件的特点和使用方法。 LabVIEW计算文件通常包含一个用户界面和相关的程序逻辑。用户界面通常由数值输入框、计算按钮和结果输出框等组成,用于接收用户输入和显示计算结果。程序逻辑则负责接收用户输入的数值,执行相应的数学计算,并将结果显示在输出框中。 在LabVIEW计算文件中,用户可以通过直接在数值输入框中输入待计算的数值,然后点击计算按钮来执行计算。LabVIEW的图形化编程界面使得用户可以通过简单的鼠标操作来搭建用户界面和编写程序逻辑,大大降低了学习和使用的难度。 LabVIEW的计算文件具有以下特点: 1. 图形化编程界面:用户可以通过拖拽、连接和配置图形化元件来搭建计算器界面和编写程序逻辑。 2. 多种计算功能:LabVIEW计算文件可以支持基本的数学运算,如加减乘除、求平方根和三角函数等,并可以根据需要扩展更复杂的计算功能。 3. 可视化输出:LabVIEW计算文件可以将计算结果以图形、表格或图表的形式直观地显示,便于用户理解和分析。 4. 数据处理能力强:LabVIEW计算文件可以实现对大量数据的高效处理,可以读取外部文件、连接仪器设备进行实时数据采集和分析。 使用LabVIEW计算文件,用户只需简单操作即可完成各种数学计算任务,无需编写复杂的代码。同时,LabVIEW的开放性和易扩展性,也使得用户可以根据自身需求进行功能拓展和定制化开发。因此,LabVIEW计算文件是一个方便、高效且功能强大的工具,被广泛应用于各个科学研究和工程实践领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值