我们正在从 Oracle 迁移到 VoltDB,我们是否应该将所有业务逻辑(迁移的存储过程)放在数据库中?这是获得最佳性能的最佳实践吗?
1 回答
我在 VoltDB 工作。您的问题没有一个正确答案,这取决于特定的架构和过程,但我可以稍微解释一下 VoltDB 中的存储过程以及与 Oracle 的区别。
首先,VoltDB 不是像 Oracle 那样的通用数据库,而是专门为 OLTP 和“快速数据”工作负载提供高性能和可扩展性而设计的。通常,这些工作负载涉及少量记录上的离散事务,但其速率为每秒数千到数百万。用例范围从对快速移动的数据集提供实时分析,到转换和丰富流数据,再到提供通常涉及数据驱动决策的低延迟响应,再到大规模交互式应用程序。
VoltDB 中的过程通常侧重于对小记录集应用原子更改,并且它们通常用于实时进行事件驱动的更改,而不是像您在 Oracle 中经常看到的那样对批量数据运行批处理。VoltDB 自动为模式中的每个表生成 CRUD 样式的过程,现在包括 UPSERT。您可以在 DDL 中声明单 SQL 语句过程。包含多个 SQL 语句和控制流逻辑的过程被编写为在数据库上运行的简单 java 类。VoltDB 还支持直接从客户端发送的 Ad-Hoc SQL 语句(兼容 ANSI SQL-92),使用本地语言客户端库或 JDBC 或 ODBC 驱动程序,或通过嵌入式 HTTP-JSON 接口。
如果 Oracle 中的存储过程用于 OLTP 操作,那么它们可能会在某种程度上直接转换为 VoltDB 过程。如果他们对批量数据执行批处理操作,那么这些流程通常可能会被重新设计为事件驱动的实时流程,从而逐步产生相同的结果。如果它们仍然必须作为一个长时间运行的批处理来完成,通常它们将被分解为由客户端进程驱动的单独的更离散的过程。