タグ付けされた質問 「java」

1
選択されたクエリにMySQLコミットデータが表示されない
コンテキスト:使用されるフレームワークはSpringであり、すべてのクエリはJdbcTemplateで実行されます。Mysqlサーバーのバージョンは5.6.19です。tableでありInnoDB table、デフォルトのようなauto commit分離レベル反復-読み取りが設定されていると。 問題:Insertトランザクション内で発生し、select挿入された同じデータを読み取ると、データが表示されません。select実行した後insertとした後、insertトランザクションが持ちますcommited。 mysqlでbinログと一般ログを有効にしました。以下の関連ログ bin-log: SET TIMESTAMP=1438265764/*!*/; BEGIN /*!*/; # at 249935389 #150730 14:16:04 server id 1 end_log_pos 249935606 CRC32 0xa6aca292 Query thread_id=40 exec_time=0 error_code=0 SET TIMESTAMP=1438265764/*!*/; insert into user_geo_loc_latest(user_id, lat, lng) values(x,y,z) on duplicate key update lat=y, lng=z /*!*/; # at 249935606 #150730 14:16:06 server id 1 end_log_pos …


3
大きなバッチの挿入速度
私のアプリケーションでは、INSERTにかなりの時間がかかっているようです。テーブルに挿入するオブジェクトがメモリ内に多数(約40〜50,000)あります。 サンプルテーブルを見てみましょう CREATE TABLE bill ( id BIGINT(20) PRIMARY KEY, amount INT(11) DEFAULT 0, bill_date DATETIME DEFAULT NOW(), INDEX (bill_date) ) ENGINE=InnoDB 私のバッチサイズとして3行を取ると、以下は挿入するために考えられるアプローチです アプローチ1-3つのrawインサートを作成して起動する INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (20, '2012-01-02 00:00:00'); INSERT INTO bill (amount, bill_date) VALUES (40, '2013-02-05 …
10 mysql  innodb  insert  java  jdbc 

2
補足のユニコード文字シマリスにOracleがJavaとは異なるバイト長を使用するのはなぜですか?
JavaコードでUTF-8文字列をOracle(11.2.0.4.0)列のサイズにトリミングすると、JavaとOracleは文字列を異なるバイト長として認識するため、エラーが発生します。NLS_CHARACTERSETOracleのパラメーターが「UTF8」であることを確認しました。 ユニコードシマリス絵文字を使用して、以下の問題を説明するテストを書きました(🐿️) public void test() throws UnsupportedEncodingException, SQLException { String squirrel = "\uD83D\uDC3F\uFE0F"; int squirrelByteLength = squirrel.getBytes("UTF-8").length; //this is 7 Connection connection = dataSource.getConnection(); connection.prepareStatement("drop table temp").execute(); connection.prepareStatement("create table temp (foo varchar2(" + String.valueOf(squirrelByteLength) + "))").execute(); PreparedStatement statement = connection.prepareStatement("insert into temp (foo) values (?)"); statement.setString(1, squirrel); statement.executeUpdate(); } これはテストの最後の行で失敗し、次のメッセージが表示されます。 …
8 oracle  java  utf-8  unicode 

3
データベースの一括更新/ CSVファイルからの挿入
あるデータベースから別のデータベースへのアプリケーション固有のデータインポート機能を実装しています。 たとえば、10000行を含むCSVファイルがあります。これらの行は、データベースに挿入/更新する必要があります。 いくつかの行がデータベースに存在する場合があり、それらは更新する必要があることを意味します。データベースに存在しない場合は、それらを挿入する必要があります。 可能な解決策の1つは、1行ずつ読み取り、データベースのエントリを確認し、それに応じて挿入/更新クエリを作成することです。ただし、このプロセスでは、更新/挿入クエリを作成してデータベースで実行するのに時間がかかることがあります。CSVファイルに数百万のレコードが含まれる場合があります。 この機能を実現する他のより速い方法はありますか?
8 java  oracle 

2
Oracle 11g:挿入のパフォーマンス改善
5億行のテーブルがある(そして成長している) 挿入のパフォーマンスを向上させるために次のことを行いました。 データベース側: すべてのインデックスと制約を削除 ロギングを無効化 アプリケーション側: JPA管理エンティティからネイティブ挿入クエリに切り替え、クエリにAPPEND Oracleヒントを追加 1k / 2k / 3k行ごとにバッチでコミットしようとしました 1つのテーブルに並列に(複数のスレッド、スレッド数=サーバーのコア数に)書き込もうとした これは私に毎秒約300行を与えました さらに試しました: 複数のテーブルにバッチで並行して書き込む(UNIONを使用して結果をグループ化して戻す) これにより、1秒あたり約1k行が得られましたが、空のテーブルにあります。しかし、テーブルにダミーデータ(それぞれ2億個)を入力すると、挿入速度が1秒あたり250〜300に低下しました。 誰かが挿入を高速化するために他に何ができるかを提案できますか?基本的に私は最初にボトルネックが何であるか(何であるか)を理解したいと思います。 UPD: テーブルは挿入日によってパーティション化され、テーブルには約60列があります-ほとんどの列はVARCHAR2(2000 BYTE)です
8 java  oracle 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.