返回大量数据时,数据库存储过程是否会出现性能不佳的问题?

时间:2011-09-22 21:03:36

标签: database stored-procedures voltdb

根据VoltDB不做的事情

http://community.voltdb.com/DosAndDonts

他们陈述

  

不要创建返回大量数据的查询(例如SELECT   *来自FOO,没有约束)特别是对于多分区   交易。在存储的返回数据中保守   程序

这是我拥有的一个用例。存储过程的某些方面是否使它们不适合此类查询,还是VoltDB特有的?在这种情况下,性能是否会降低到比Postgres等传统RDBMS更差的水平?

编辑:我的查询不是来自foo的select *但是我需要选择某些日期范围之间的所有金融交易,这可能会超过100米行

3 个答案:

答案 0 :(得分:3)

所有数据库都需要支付实现和i / o成本,以便将大量结果集传回给用户。

但是,我可以专门讨论VoltDB。

在VoltDB中,存储过程都是事务。即使是选择数据库的大部分的结果集也与其他并发过程完全隔离。结果集中的元组需要在内部暂时缓冲(例如,用于跨分区排序或限制),然后返回给用户。

需要在可能需要数毫秒(或几秒)的I / O返回给用户的结果上保持完全隔离以及在多分区过程的协调节点处发生的聚合的组合限制了最大值结果集大小。

我怀疑未来版本将解决此限制 - 许多人的数据访问要求与您描述的类似。

答案 1 :(得分:1)

性能问题是大数据传输。这通常适用于所有数据库。

当数据库需要返回大量数据时,它需要使用大量资源(例如内存,CPU,网络IO),从而降低性能。

单独的网络IO可能是一个问题,好像它是一个大量的数据,在数据传输完成之前,没有其他任何东西可以通过网络。

答案 2 :(得分:0)

如果要查询SELECT * FROM FOO以便将结果显示给用户界面或类似的用例,那么分页是一种限制返回数据大小和事务执行时间的好方法。 a中有一个分页示例。

如果您尝试从VoltDB中提取数据以导出到另一个数据库或系统,更好的方法是使用VoltDB的Export