問題タブ [batch-updates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1850 参照

mysql - バッチの挿入/削除を実行する最良の方法 spring-jdbc/mysql

まず、私がやりたいことを説明してから、質問をします。次のことを行う必要があります。

  • いくつかの条件に対応するすべての行を一覧表示する
  • いくつかのテストを行います (例: まだ挿入されていないかどうかを確認します)。テストに合格した場合は、行を別のデータベースに挿入します。
  • 行の削除 (テストに合格したかどうか)

以下は私の実装です

サービス メソッドはトランザクションとしてマークされます。

私の DAO メソッドでは、deleteList と insertList はかなり似ているので、ここでは挿入用のメソッドを配置します。

}

このような操作を実行する最善の方法についてはわかりません。ここで、ループ内で更新を呼び出すとシステムの速度が低下する可能性があることを読みました (特に私の場合、一度に約 100K の挿入/削除があります)。DAO 内のこれらの追加のループがシステムの速度をさらに低下させないかどうか、また、そのバッチの処理中に問題が繰り返し発生した場合はどうなるのだろうか (テストをサービスから DAO に移動して、ループを 1 つだけにし、追加のテストを追加することも考えました。それが良いアイデアかどうかはわかりません)。そこで、アドバイスをお願いします。どうもありがとう。

PS: 詳細が必要な場合は、お気軽にお問い合わせください。

0 投票する
1 に答える
445 参照

hibernate - 休止状態のバッチ更新

Java エンティティのコレクションを更新しようとしていますが、Hibernate がバッチ更新を実行する順序により、制約違反の例外が発生します。以下の例を使用して状況を説明します。

エンティティ 学生 Int id 文字列 名前 文字列 デスク ID

ルール: 2 人の生徒が同じ机を持つことはできません

1 回目のトランザクション: 次のように 2 人の生徒を挿入します。 Student 1 Id:1 Name:ABC DeskId:D1

生徒 2 Id:2 名前:DEF DeskId: D2

この後、両方の学生エンティティを更新して机を交換することにし、更新された学生エンティティのコレクションを送信して休止状態にします update Student 1 Id:1 Name:ABC DeskId:D2

生徒 2 Id:2 名前:DEF DeskId: D1

しかし、更新は一度に1レコードずつ行われていると思うので、これは制約違反の例外につながります。

JTA エンティティ マネージャーを使用してトランザクションを管理しています。更新するコードは次のようになります

0 投票する
1 に答える
1388 参照

java - mysql batchUpdate の制限

batchUpdate()の関数の最大レコード制限はありますかSimpleJdbcTemplateここにリンクします。

一度に約 100,000 レコードを挿入する必要があります。現在、次の行でタイムアウトが発生しています。

助言がありますか?

0 投票する
1 に答える
1366 参照

mysql - mybatis@insertはバッチ更新を再実行します

バッチセッションオブジェクトでカスタムSQLを実行しようとしています

しかし、バッチのフラッシュとコミットを担当する次のコードには、いくつかの不思議な動作があります

それは完全に実行され、batchSqlSession.flushStatements()は実行されたステートメントの数を返します。前のバッチが正常に実行されたにもかかわらず、このコードbatchResult = batchSqlSession.flushStatements(); およびbatchSqlSession.commit(); 次の反復で同じ古いバッチを再実行します。なぜ ?

0 投票する
1 に答える
2420 参照

java - ON DUPLICATE KEY UPDATE を使用した MySQL Batchupdate()

batchUpdate()テーブルに複数のレコードを挿入するために使用しています。要件に従って、挿入中に主キーに重複する値がある場合、最新の受信データで更新する必要があるためON DUPLICATE KEY UPDATEINSERTステートメントで使用しようとしていました。単一のON DUPLICATE KEY UPDATE挿入を使用するとうまく機能しますがbatchupdate()、同じクエリを使用するとエラーが発生します。エラーは次のとおりです。

テストケース: testVehicleTracking(com.em.ert.test.TrackingServiceTest): PreparedStatementCallback のエラーが発生しました。悪い SQL 文法 [INSERT INTO test_tracking (sino, material_id, material_type, vehicle_position, rundown_num, msg_type, msg_status, msg_timestamp) VALUES(?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE]; ネストされた例外は java.sql.BatchUpdateException です: SQL 構文にエラーがあります。1 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ON DUPLICATE KEY UPDATEbatchupdate() で動作しない理由がわかりません。私が見る限り、作業に違いは何もないので、理想的にはそうあるべきです。

これを達成するために私は何をすべきですか?

0 投票する
0 に答える
1177 参照

java - Spring の JdbcTemplate を使用してデータを削除および挿入しようとしています

Spring の JdbcTemplate から batchUpdate を使用しようとすると問題が発生します。

問題は、2 つの SQL 操作を実行したいということです。DELETE メソッド (テーブルをクリアするため) と INSERT メソッドです。(jspから)初めて呼び出しを行ったときに正常に動作します。しかし、2 回目の試行から呼び出しを実行しようとすると、DELETE プロシージャが呼び出されたり実行されたりせず、INSERT プロシージャだけが呼び出され、一意の制約例外が発生します。

最初に私はこれを試しました:

それから私はこれを試しました:

Spring Transaction の問題かもしれないと思います。これは、私の DAO プロシージャのapplicationContext.xmlの構成です。非常に単純です。

アイデアや提案はありますか?

0 投票する
1 に答える
3740 参照

redis - 並べ替えられたセット内のすべてのメンバーの REDIS/jedis 更新スコア

REDIS で中サイズのソート済みセットをインクリメントする最良の方法は何ですか? (できれば Java ドライバー JEDIS を使用) Set には約 100 ~ 200K のレコードが含まれます。指定された倍数でスコアを増やしたいです。

後 (1 ずつ増加)

私が思いついた唯一の解決策は次のとおりです。

  1. ネットワークを介してすべてのソートされたセット (A など) のコンテンツを取得します。(REDIS -> アプリケーション)。
  2. パイプラインを作成し、ループ内の ZADD または ZINCRBY を使用して同じ setA でそれらをインクリメントします
  3. 次に、パイプラインを実行します。

それを行う別の/より良い方法はありますか?

アップデート

REDIS で EVAL と Lua を使用して、for ループを実行し、すべての並べ替えられたセット メンバーをインクリメントする方法を次に示します。

これを文字列に保存し、ドライバー (この場合は java) を使用して eval を実行します。実行は何も返しません。

ジェディスを使って

0 投票する
1 に答える
125 参照

oracle - Oracleビューを使用したBatchUpdate

実行に約2〜3秒かかる複雑なOracleビューがあります。

Oracleビューからテーブルに値を挿入しようとしています。

JdbcTemplate BatchUpdate()を使用して、テーブルに複数の値を挿入しています。

BatchUpdate()では、PreparedStatementを使用して値を設定します。

Oracleビューを使用すると、パフォーマンスの問題が発生しますか?

PreparedStatementを使用すると、SQLステートメントがプリコンパイルされます。しかし、VIEWの場合、挿入クエリが実行されるたびにビューが実行されますか?

0 投票する
1 に答える
590 参照

.net - バッチ更新: StatementType 列挙値、4 は無効/無効な操作です。接続が閉じられました

Enterprise Library の Data Access Block を使用しています。

私のコードは大規模なバッチ更新を行っていますが、顧客の 1 人にとっては、次の例外のいずれかで常に失敗します。