Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪一个更快,或者只是被认为是坏代码_Java_Mysql_Database_Coding Style - Fatal编程技术网

Java 哪一个更快,或者只是被认为是坏代码

Java 哪一个更快,或者只是被认为是坏代码,java,mysql,database,coding-style,Java,Mysql,Database,Coding Style,假设我们有一个MySQL后端,其中一个表的主键是用UNIQUE属性定义的。我们正在从多个分布式系统接收数据,这些系统都具有相同/相似的实现 在某些时候,我们将尝试批量插入,例如1000万个文档行,但我们只希望在不违反唯一约束的情况下存储数据,哪种方法更快/考虑ok e、 g 或 在我看来,我猜在这两种情况下,我们试图插入的id都必须“找到”,因为我们必须验证唯一的约束,但就速度而言,这两种情况中哪一种被认为或多或少是正常的 附带问题:答案/结果(例如速度)是否与mongoDB的Mysql相同?您

假设我们有一个MySQL后端,其中一个表的主键是用UNIQUE属性定义的。我们正在从多个分布式系统接收数据,这些系统都具有相同/相似的实现

在某些时候,我们将尝试批量插入,例如1000万个文档行,但我们只希望在不违反唯一约束的情况下存储数据,哪种方法更快/考虑ok

e、 g

在我看来,我猜在这两种情况下,我们试图插入的id都必须“找到”,因为我们必须验证唯一的约束,但就速度而言,这两种情况中哪一种被认为或多或少是正常的

附带问题:答案/结果(例如速度)是否与mongoDB的Mysql相同?

您是否可以不使用。这样你就不用担心他们的密钥是否已经存在了?所以在你的情况下你可以

ON DUPLICATE KEY UPDATE id=id
你不能只使用一个。这样你就不用担心他们的密钥是否已经存在了?所以在你的情况下你可以

ON DUPLICATE KEY UPDATE id=id

如果你坚持循环记录并逐个处理,我会建议另一种方法

伪代码

  • 创建一个哈希列表
  • 在哈希列表中搜索唯一键
  • 如果找不到,则插入数据库。将唯一键添加到哈希列表中
  • 获得下一个记录
  • 如果不是eof,转到2

  • 如果您有许多重复项,您将节省大量(相对)昂贵的数据库调用。

    如果您坚持循环记录并逐个处理它们,我将建议另一种方法

    伪代码

  • 创建一个哈希列表
  • 在哈希列表中搜索唯一键
  • 如果找不到,则插入数据库。将唯一键添加到哈希列表中
  • 获得下一个记录
  • 如果不是eof,转到2

  • 如果您有许多重复项,您将为自己节省大量(相对)昂贵的数据库调用。

    一般来说,我会保留对。。。例外情况:)换句话说,如果正常工作流程中可能发生某些情况,我宁愿使用常规的
    if
    来处理该情况。空的
    catch
    子句通常表示有问题

    另外,我更愿意使用这个构造(而不是重复的
    ——它工作得很好,但我不喜欢hackish
    updateid=id

    如果使用IGNORE关键字,则会忽略执行INSERT语句时发生的错误。(…)忽略的错误可能会生成警告,但重复的键错误不会


    一般来说,我会保留例外。。。例外情况:)换句话说,如果正常工作流程中可能发生某些情况,我宁愿使用常规的
    if
    来处理该情况。空的
    catch
    子句通常表示有问题

    另外,我更愿意使用这个构造(而不是重复的
    ——它工作得很好,但我不喜欢hackish
    updateid=id

    如果使用IGNORE关键字,则会忽略执行INSERT语句时发生的错误。(…)忽略的错误可能会生成警告,但重复的键错误不会


    纯粹在mysql中进行唯一性测试。如果您使用PHP进行测试,然后尝试插入,您将打开一个竞争条件,在该条件下,同一脚本的其他一些实例可以在您的脚本后面剪断db“槽”。当然,您可以始终使用SQL级别的表/行锁来防止这种情况,但这会带来其他问题。我认为第一种方法更好,因为您不必先执行
    选择
    ,尤其是当数据库中有数百万行时。我不是mysql专家,但我不认为只有当您有重复条目时才会抛出
    MySQLIntegrityConstraintViolationException
    ,这意味着这是更安全的解决方案。如果我们要查看操作本身所需的实际时间,则必须进行查找以确定这两种情况下是否存在密钥,如果失败,通过发出find或throw异常来确定这一点会更慢吗?我认为如果在时间上有100万个新条目,抛出9900万个异常可能是个坏主意。只在mysql中进行唯一性测试。如果您使用PHP进行测试,然后尝试插入,您将打开一个竞争条件,在该条件下,同一脚本的其他一些实例可以在您的脚本后面剪断db“槽”。当然,您可以始终使用SQL级别的表/行锁来防止这种情况,但这会带来其他问题。我认为第一种方法更好,因为您不必先执行
    选择
    ,尤其是当数据库中有数百万行时。我不是mysql专家,但我不认为只有当您有重复条目时才会抛出
    MySQLIntegrityConstraintViolationException
    ,这意味着这是更安全的解决方案。如果我们要查看操作本身所需的实际时间,则必须进行查找以确定这两种情况下是否存在密钥,如果失败,通过发出find或throw异常来确定这一点会更慢吗?我想如果100万个新条目在时间上抛出9900万个异常可能是个坏主意?好的,但是如果我们想知道插入是好是坏,如果我们有多个系统插入,我想这在分布式环境中不起作用,因为我们必须使用LAST_INSERT_ID()来确定计数器是否已递增,并且有多个系统执行插入,我想我们不能真正依赖这个计数器。
    LAST_INSERT_ID()
    返回在当前会话中插入的ID a记录(参见),因此并发插入并不重要。此外,为了确定最后一次插入忽略是否成功,我将检查是否生成了警告(
    SHOW WARNINGS
    ,或等效的API调用),但我想这确实是一个错误
    ON DUPLICATE KEY UPDATE id=id