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

Database 数据库存储过程在返回大量数据时是否会出现性能不佳的问题?,database,stored-procedures,voltdb,Database,Stored Procedures,Voltdb,在VoltDB下不要 他们说 不要创建返回大量数据的查询(如SELECT) *来自无约束的FOO),特别是对于多分区 交易。对存储数据返回的数据要保守 程序 这是我拥有的一个用例。存储过程是否有某些方面不适合这种类型的查询,或者它是VoltDB特有的?在这种情况下,性能是否会下降到比Postgres等传统RDBMS更差的水平 编辑:我的查询不是完全从foo中选择*,但我需要选择特定日期范围内的所有金融交易,这可能超过100万行性能问题是大数据传输。这通常适用于所有数据库 当数据库需要返回大量数

在VoltDB下不要

他们说

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

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


编辑:我的查询不是完全从foo中选择*,但我需要选择特定日期范围内的所有金融交易,这可能超过100万行

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

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


网络IO本身可能是一个问题,就好像它是大量数据一样,在数据传输完成之前,其他任何东西都不能通过网络传输。

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

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


网络IO本身可能是一个问题,因为如果它是大量数据,那么在数据传输完成之前,其他任何东西都不能通过网络传输。

所有数据库都需要支付物化和i/o成本,才能将大量结果集传输回用户

但是,我可以专门与VoltDB交谈

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

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


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

所有数据库都需要支付物化和I/o成本,才能将大量结果集传输回用户

但是,我可以专门与VoltDB交谈

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

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


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

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


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

如果您正在查询SELECT*from FOO以将结果显示到用户界面或类似用例,然后,分页是限制返回数据大小和事务执行时间的好方法。中有一个分页示例


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

我对VoltDB一无所知,但我倾向于同意
SELECT*FROM FOO
通常是一个坏主意,传统的数据库或内存中会返回比您需要的更多的数据,这包括在生产代码中不使用SELECT*,特别是当连接列重复并且因此不需要数据时。另外,是否真的有人会阅读你返回的所有300万条记录,或者你可以进行分页,只返回你所需的页面内容?我对VoltDB一无所知,但我倾向于同意
SELECT*FROM FOO
通常是一个坏主意,传统的数据库或内存中会返回比您需要的更多的数据,这包括在生产代码中不使用SELECT*,特别是当连接列重复并且因此不需要数据时。另外,是否有人真的会通读您返回的所有300万条记录,或者您可以进行分页,只返回您所在页面所需的内容?