【问题标题】:Are Netezza and Hive for Hadoop ACID compliant?Netezza 和 Hive for Hadoop ACID 是否兼容?
【发布时间】:2014-10-21 16:11:42
【问题描述】:

我了解到 Netezza 符合 ACID。虽然我也读过 Netezza 不强制执行外键,这意味着违反了 C 的 ACID。 Netezza(直到版本 7.1.0.0 )也不支持像 Oracle 那样的存储过程中的提交/回滚。这意味着违反了 ACID 的 A。正确答案是什么?是否符合 Netezza ACID?如果有怎么办?

Hive 没有像 Oracle 那样将多个语句作为一个事务的一部分提交/回滚,但确实保证每个单个事务都完整执行或不完整执行,这使其成为原子的。它不强制执行pk,fk,但保证数据库的一致性。所以,我相信它是符合 ACID 的,但据说它不是。想法?

【问题讨论】:

    标签: hadoop hql netezza acid


    【解决方案1】:

    Netezza 符合 ACID。确实,主键/外键定义仅供参考,并不强制执行,但这并不违反一致性。由于主键或外键仅在 Netezza 中提供信息,因此拥有不符合主键定义的数据并不是无效状态。

    同样,虽然早期版本的 Netezza 没有在存储过程中提供显式事务控制,但在 BEGIN/COMMIT 之外,每个存储过程都隐含地是它自己的事务,在这种情况下,事务仍然要么在完成时完全提交或在中止时完全回滚,从而保持原子性。

    如果您在 BEGIN/COMMIT 块中调用存储过程,则存储过程将返回活动事务块,并且必须显式提交回滚。

    不过,在存储过程中允许 COMMIT 的新行为确实会产生不同的行为。

    【讨论】:

    • 没错。 Netezza 中的 FK 仅供参考。 ACID 的“一致性”不是意味着强加数据类型、pk、fk 约束吗?至于原子性,假设作为单个事务的一部分,我想对 plsql 块中的两个表执行两次更新。由于它是同一事务的一部分,我当然只想在两者结束时提交。如果系统在第一个更新语句后出现故障怎么办?那如何保证'A'tomicity?
    • 此处的一致性仅与强制执行的 fk 和 pk 约束相关。如果它们没有被强制执行,那么它们与数据库是否处于有效状态无关。如果 Netezza 确实执行了它们,那么它们将与一致性相关。关于原子性,您(或之前 7.x)仅限于存储过程中的事务范围,但是在存储过程中发生的事务是原子的,您不能(或不能) t, pre-7.x) 使多个语句成为具有存储过程的单个事务的一部分。
    • 我明白你在说什么。我对 ACID 的理解与 here 不同。当我开始寻找 Hive for Hadoop 是否符合 ACID 时,这整个事情就开始了。根据您的定义,我可以说即使 HQL 也符合 ACID,但实际上并非如此。没关系,如果您没有在 Hadoop 中工作过。我已更改标题以获取 HQL 的输入。
    • 斯沃特关于这个主题的博客很好。但请注意技术定义。他定义了“一致性——事务达到其正常结束,从而提交其结果,保留了数据库的一致性。换句话说,根据定义,每个成功的事务只提交合法的结果。”选择强制执行这些约束,你必须坚持下去。不强制执行约束的数据库可能会违反它们并且可以。 ACID DB 保证 DB 在其规则内有效,而不是在应用程序的规则内有效。因为约束只是信息性的,所以数据库数据仍然有效且一致。
    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多