0

在 VoltDB 下不要

http://community.voltdb.com/DosAndDonts

他们说

不要创建返回大量数据的查询(例如没有约束的 SELECT * FROM FOO),尤其是对于多分区事务。保守存储过程返回的数据。

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

编辑:我的查询不是一个 select * from foo 但我需要选择某些日期范围之间的所有金融交易,这可能超过 1 亿行

4

3 回答 3

3

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

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

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

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

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

于 2011-09-25T14:50:22.613 回答
1

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

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

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

于 2011-09-22T21:05:26.603 回答
0

If you are querying SELECT * FROM FOO in order to display the results to a user interface, or a similar use case, then paging is a good approach to limit the size of the data returned and the execution time of the transaction. There is a paging example in a.

If you are trying to extract data from VoltDB to export to another database or system, the better approach is use VoltDB's Export.

于 2012-02-09T20:18:48.703 回答