元スレMySQL 総合 Part18
mysql覧 / PC版 /みんなの評価 :
952 = :
普通は3番でも、>>946がやる3番は、何か違うものになりそうな気がする・・・
953 = :
>>944
実は必須ではないんだぜ。
962 :
バッチで30個のテーブルに1万件ずつほどのデータを登録しようと思っています。
バッチで登録処理を行なっている間も他のプログラムからテーブルへの
参照が行われる事が考えられるのでトランザクションを貼ろうと考えていますが、
beginをバッチの開始直後,commitをバッチの終了時に行うと
凄くパフォーマンスが悪いように思えます。
テーブル単位でトランザクションを貼ると、
他のプログラムから参照を行ったときに
テーブル間のデータの不整合が発生することが考えられるのですが、
みなさんはこういう場合はどの様に設計されますか?
963 = :
>>962
> バッチで登録処理を行なっている間も他のプログラムからテーブルへの
> 参照が行われる事が考えられるのでトランザクションを貼ろうと考えていますが、
参照が行われるからトランザクションを使う?
その発想にいたる背景がわからないので答え難い。
安易にバッチ処理での登録と考える前に、
登録処理中にテーブル参照されることで発生する不都合が何かを考慮してから、
データ登録の方法を考えるべきだと思います。
964 = :
>>963
言葉足らずで申し訳ありません。
テーブルを参照するプログラムは
データの集計を行うプログラムになります。
Aというテーブルではバッチからの更新が終了しているけれど
Bというテーブルではまだバッチで更新中となっている場合
HOGEというプログラムが両方のテーブルの情報を集計するとなると
テーブル間の不整合が発生するのでトランザクションを使用しています。
そして今回はバッチで登録・更新をするテーブルの数が多いので
>>962にあるような質問をさせていただきました。
965 = :
HOGE というプログラムが、テーブルAとテーブルBを参照するんですね?
そのHOGEというプログラムが、テーブルAとテーブルBに登録処理をしている最中でも稼動するんですね?
HOGE というプログラムがシステムの中で重要度が高いのであれば…
テーブルAとテーブルBにデータを登録する際には、HOGEというプログラムを考慮して、
テーブルAとBへのデータ登録は両テーブルの整合性が取れている状態として1件ごとに処理をする。
そんな方法を検討する可能性も有ります。
述べられている「参照するプログラム」が出力する結果が、そのシステムでどれだけ重要であるかを考慮する必要があります。
逆の意味で述べれば、テーブル更新が終了する前に、システムとして重要な出力結果を出すHOGEを実行しない、これが適切だとも言えます。
966 = :
初歩的な質問ですが探してもわからなかったので質問します
MySQL5.1をInnoDB Pluginで使っていますが、
1つのテーブルのカラム数は大体このくらいまでにしておいた方が良い、ってのはありますか?
扱うデータが多くて、素直に組むとカラム数が200ぐらいになるのですが
これが1億レコードぐらいになると、パフォーマンスに結構影響しますか?
経験がなくてわからないので、皆さんの意見を聞きたいです
968 = :
>>964
別にバッチ処理中か確認するようにすれば?
別テーブルにフラグみたいなもん立てるとか。
969 = :
素直にトランザクションで解決してなにが悪いのかワカラン。
コミットに時間がかかってもバッチ処理なら問題ないだろうし。
974 = :
>>971
> カーソルを使って、1件ずつ読みだして処理する。。
> MySQLで同じような処理を行おうと思いましたが、
> カーソルに対応していないことを知りました。
あなたの言われている「カーソルに対応していない」とは、何を指しているのか理解できません。
975 = :
>>974
カーソル知らないの?
1行ずつフェッチして、更新したりできるんだよ、大量データを逐次処理できるの
976 = :
> カーソルに対応していない
カーソルは知っているけれども、対応していないが漠然としているのでは?
979 = :
>>978
http://dev.mysql.com/doc/refman/5.1/ja/cursors.html
980 = :
>>979
それ、ストアドだって。
もともと、Cライブラリでカーソルとかいうことじゃね?
983 = :
>>965
レスありがとうございます。
>HOGE というプログラムが、テーブルAとテーブルBを参照するんですね?
そうです。
>そのHOGEというプログラムが、テーブルAとテーブルBに登録処理をしている最中でも稼動するんですね?
そうです。
>テーブル更新が終了する前に、システムとして重要な出力結果を出すHOGEを実行しない、これが適切だとも言えます。
こちらの方法を検討してみようかと思っています。
ただ、バッチは30分近くかかりそうなので、
その間HOGEが実行されないのが業務用件的にNGになりそうな気配もあります。
>>968
ありがとうございます。
その方向で少し検討してみます。
>>969
大量のデータを登録・更新するときって
トランザクションをずーっと貼りつづけていると
すこぶるパフォーマンスが落ちることってありませんか?
あ、バックグラウンドのバッチだからそんなの気にしなくてもいいじゃないかって
ことでしょうか?
984 = :
>>983
> >>969
> 大量のデータを登録・更新するときって
> トランザクションをずーっと貼りつづけていると
> すこぶるパフォーマンスが落ちることってありませんか?
InnoDBのMVCCはそこまでアホな実装じゃない。
バッチだから仮に遅くても気にしなくていいってのはそう思うし。
みんなの評価 :
類似してるかもしれないスレッド
- MySQL 総合 Part12 (1001) - [94%] - 2008/1/30 17:34 ○
- MySQL 総合 Part13 (996) - [94%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part15 (1001) - [94%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part19 (982) - [94%] - 2011/6/9 2:33
- MySQL 総合 Part26 (860) - [89%] - 2023/2/2 9:30
- MySQL 総合 Part20 (995) - [89%] - 2011/10/17 4:48
- MySQL 総合 Part21 (1001) - [89%] - 2011/12/25 22:16
- MySQL 総合 Part22 (1001) - [89%] - 2012/7/10 16:45
- MySQL 総合 Part23 (992) - [89%] - 2013/8/11 17:00
- MySQL 総合 Part24 (1010) - [89%] - 2015/2/14 4:46
- MySQL 総合 Part25 (947) - [89%] - 2017/6/18 6:30
- MySQL vs PostgreSQL Part2 (941) - [31%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について