MySQL
2015/10/15 23:00:57Noranekoです。
思うところがあり、MySQLをチューニングしてみました。
システムにもよりますが、今まで数千件のデータを一件ずつグルグル回してinsertしてたのですが、
ちょっと時間もかかるようになってきたので、一括insertに変更しました。
SQLなんかも特に難しい書き方はせず、
『,』
で繋げていくだけです。
INSERT INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
これが基本。
で、最後のカンマを取りたいのでphpを使って、
$sql = substr($sql, 0, -1);
$res = $dbCon->query($sql);
$res = $dbCon->query($sql);
として、流しましょう!!
よしよし、これでぐっすり寝れる。
寝れませんでした!
Duplicateエラーでこけてました。
しかも一気に流すので、ひとつもINSERTできていませんでした^q^
当然やね!
なので、最初のSQLにある魔法の言葉を加えます。
INSERT IGNORE INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
どこが変わったかよくわかりませんね。
IGNORE
これを追加しました。
無事INSERTできて、ぐっすり眠れる日が来ました。
しかし、ある日見慣れぬエラーが!!!
次回、
『迫りくる脅威、この愛は届くのか?』
をお送り致します。
と、次回に持ち越しても良かったんですが、備忘録にならないので続けます!
それで、その時遭遇したエラーと言うのが、
MySQL server has gone away
義務教育6年間+αの英語教育を習った私は驚愕しました。
has gone away
この言葉の重み!!
直訳すると
『逝ってしまわれた』
ですよ!!
しかも、present perfectです!!
うおおおおおおDB逝ったあああああ!
と思いましたが、MySQLWorkbenchは繋がってSQLも打てる状態でした。
なんなんだこのエラーメッセージは...
ORACLEしかり何故こうもDBのエラーメッセージはうんこなのか?
わかりやすいエラーを表示すると死ぬの?馬鹿なの?
ということでググル先輩に聞いてみたところ、タイムアウトとかいろんな要因がでてきます。
が、私の場合心当たりがあるので、そこを調べてみたところビンゴでした。
その前に下記のSQLを流してみましょう
SHOW VARIABLES LIKE 'max_allowed_packet'
>1048576
>1048576
となるはずです。
これは一回のSQLで流せるのが1,048,576Byte
つまり1MBですよ!
と言う意味です。
案の定、数千件のINSERT文のバイト長を調べたところちょっと超えていました。
一応カラム長とかから、大雑把に計算してその件数を決めていたのですが、
本当にわずかに超えていました。
おしかったね!
ちなみにバイト長を調べるには、
echo(strlen($sql));
とすればわかります。
なので件数を半分にしました。
これでぐっすり眠れるようになりました!
おしまい。
気に入ったら押してね
~こんなアプリ出してます~
Google Maps JavaScript APIとか
2015/10/14 18:39:37表示できなくなってるぅぅぅううううう^q^
Noranekoさんです。
本家のマップが改悪されて、検索結果の左ペインがうざくなったり、
POIをクリックした時に地図の中央に来なくなったので、
URLから緯度経度が取れなくなったり
ほんと余計なことするなよ…
無駄な情報を出したいなら、最初の時みたいに左ペイン固定にしとけよ…
と言うわけで、Google Maps JavaScript API
を使用したカスタマイズをちょっとだけ説明します。
今回、地図をオレ色にしたいと思って、SNAZZY MAPSからAvocado Worldを拝借して、
更に自分好みにカスタマイズしました。
ソースを見てもらうと
var option = {
zoom: 8,
center: new google.maps.LatLng(36.343103, 138.863238),
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles:[{"featureType":"landscape", bla bla bal... }]
};
zoom: 8,
center: new google.maps.LatLng(36.343103, 138.863238),
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles:[{"featureType":"landscape", bla bla bal... }]
};
という地図の初期化のstylesの部分がデザインになります。
Avocado Worldでは、
{"color":"#abce83"}
という風に色指定をしています。
これにすると、山や海などが一色でベタ塗されてしまいます。
なので、ここを
{hue:"#abce83"},
{saturation:20},
{lightness:-20}
{saturation:20},
{lightness:-20}
として、指定した色に近くなるように調整しました。
Photoshopを使って、HSBを合わせて見たりしたんですが、上手くいかなかったので、
数値をいじりながら指定した色に近づけたのが上記の値です。
あと、日本の高速道路と国道(?)が同一で塗られてしまっている問題があったので、
{"featureType":"road.highway","elementType":"geometry.stroke"}{"featureType":"road.highway","elementType":"geometry.fill"}{"featureType":"road.highway.controlled_access",
"elementType":"geometry.fill"}
"elementType":"geometry.fill"}
これを指定するといい感じで道路の色分けが出来ます。
この道路種別がよくわからなくて、県道とかも途中から塗られてなかったり
仕様が謎です。
また、配列を扱う際は、
var hogeArray = new google.maps.MVCArray();
を使うことにより、
hogeArray.forEach(function(hoge, idx) {
alert(hoge);
});
alert(hoge);
});
とforEachを使って要素を簡単に出すことが可能です。
ですが、自分みたいにマーカに対して一対の情報ウィンドウがある場合、
どちらか片方だけ配列に入れておけば事は足ります。
情報ウィンドウが地図の子供としてあるのですが、
『1つのマーカに対して1つの情報ウィンドウを持つ』
と言った使い方をしている人の方が、多いのではないのでしょうか?
???『なんかそういうデータあるんですか?』
???『あなたの感想ですよね?』
ええ、私の勝手な感想です^ω^
つまり何が言いたいかと言うと、
『1つのマーカに対して、1つの情報ウィンドウを持つマーカオブジェクトを作れ』
ということです。
お前が作れって話ですね。
めんどくさいです。
配列2個持ちます。
1つのマーカーに対して、1つの情報ウィンドウを持つマーカオブジェクトを
実装させた方は、是非ご一報下さい!
気に入ったら押してね
~こんなアプリ出してます~
ねこのニジマス
2015/10/06 21:12:04Noranekoです。
というわけで、自分の趣味でもある釣りのポータルサイトを構築してみました。
『ねこのニジマス』
です。
幾つかは自分も行ったことがあるエリアなので、簡単なレビューも入れて行こうと思っております。
なんかGoogle Maps APIも若干変わってたり、ジオコーディングが使えたりと
使い方のわかる人にとっては、いろんなことができるようになってますね。
自分の使っているやつは無料なので、25,000リクエスト数/日となってます。
つまり25,001番目にトップを開くと地図が表示されないってことですね!
ということで、ニジマス釣りをやる方や興味がある方は、見てみて下さいませ~☆
気に入ったら押してね
~こんなアプリ出してます~