エンタープライズIT系エンジニアのぼやっきー

特にまとまりもなく、色々なことをぼやきます。最近はオープンソースの業務系システムに興味あり。

発注側と受注側の意識の溝を埋めよ

f:id:junmt:20151130134201p:plain
チームほぼひとりが長かったこともあって、発注側として立ち回ることが多くありました。
一方で、私のミッションは開発者としてお客様から受注したものを作る立場でした。*1

物販の場合はあまり意識の溝というのは生まれないかと思いますが、「受託開発系」で最近、目にした光景が余りあるものだったので、どうやったら発注側と受注側の意識の溝が埋められるか書きます。

遠回しになってしまいましたが、ここで言いたい受託開発系とは、受託開発、Webサイト制作などのIT系の開発/制作だと思っていただければと思います。

発注側の意識

発注を行うのは以下の理由のいずれか、あるいはそれらの複合的要因です。

  • リソース不足(人、機材等のモノ)
  • ナレッジ不足(やり方がわからない、プロに任せたい)

これを安く早く低コストで手に入れたいという欲求があります。
言い換えれば、以下のようになります。

  • 自分たちの手を動かしたくない
  • 言ったことだけではなく、プロとして全体を見て隙間を埋めて欲しい
  • 支払うお金は少なければ少ないほど良い

発注するということは、もちろん上記を期待してますよ、という意識です。

受注側の意識

受注側は自ら持つ商材を提供します。

  • 物品の提供
  • サービスの提供

お客様が「欲しい」と思うモノを提供するわけです。
そこで働く意識は以下のようになります。

  • お客様が細かく要件を伝えてくれる
  • 要件定義で漏れた内容については極力対応したくない(追加費用をもらいたい)
  • 受注後は能動的に動いて要件を膨らませないようにしたい

我々は受けてのため、言われたことはやるけどもそれ以外はやりませんよ、というスタンスです。

悲惨な状況に発展していく

上記に挙げた人たちが一緒に仕事をすると、以下のようなことが発生します。

発注側

  • なんで自分たちがこんな作業をしなければならないんだ?
  • こう言ったら、ここまでやるのが当たり前なのに拒否しやがる
  • 追加費用ばかりで全然前に進めない

受注側

  • 要件の伝え漏れなんだか、見積に入っているわけないだろ
  • おたくの業務なんてわかるわけないのに何で要求されるの?
  • 具体的指示もせずに何を作れっていうのか

両者、全く話が通じ合いません。

正直、上記で挙げたのは発注側も受注側も勉強不足と言えます。
しかし、そのようなマインドを持った人たちは非常に多く、愚痴を言っても仕方がないわけです。

お互い歩み寄れ、相手がどう考えているかわかるはずもない

このようなことが起こる根本的な原因は、お互いのことを過度に期待しているためです。
別に期待するな、という話ではなく相手が期待しても良いかどうかを見極める必要があります。

しかし、この見極めは非常に困難です。
営業段階の口約束も社長とかが出てくれば鶴の一声で簡単に破られてしまいます。

発注側はよりRFPのように要件を細かく伝えることも大事ですが、それ以上に「伝え漏れが発生すること」が「当たり前」であることを知るべきです。
また、受注側は「お客様が目的を達成するためには言われたこと以外の作業が増える」のが「当たり前」であることを知るべきです。

私が見てきた限りでは受注側は赤字を防ぐために、上記の認識を強く持っている人が多いですが、お金に無頓着で意識を持っていない愚か者も存在することを理解しましょう。

おそらく読んだ方は皆さん当たり前だと思っているかもしれませんが、起きるので油断しないように気をつけましょう。

[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

*1:厳密には多くの仕事は製品開発をしていて、受注できる製品を作ることが多々ありましたので若干語弊がありますが、受託開発の業務や営業同行もやっていましたので、その経験を元にしています。

セールスフォースからの乗り換えでコスト大幅削減! その方法は?

F-RevoCRMを開発/運営しているシンキングリード(株)主催のセミナーが告知されています。

f-revocrm.doorkeeper.jp

残念ながら私はセールスフォースユーザーではないので、参加はしない予定です。

実は過去に通常機能を触ったことがありますが、F-RevoCRMと大差ないですね。
その時にDynamicsCRMも触りましたが、動作速度が遅すぎて*1機能を試す気も失せました。。

セールスフォースをお使いの方は参加されてみてはいかがでしょうか。


[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

*1:その時たまたまかもしれませんが。

リーダー不在の会議やプロジェクトは破綻する

f:id:junmt:20151118132525p:plain
リーダー不在の会議やプロジェクトが存在することをご存知でしょうか。
ありえない状況ですが、実際にあったので書きます。

リーダー不在だと何が起こるのか

進まない、決まらない、終わらない。

  • 会議の進行する人がいない
  • 決定すべき事項がまとまらない(何を決定していいのかわからない)
  • 意思決定権が誰にあるのかわからない

最後は会議やプロジェクトが破綻します。
あの時間はなんだったんでしょうか。。

リーダー不在はなぜ起こるのか

はっきりとした理由はわかりません。
仮説ですが、以下のようなものが考えられます。

  • 責任を取りたくない
  • 部下を育てたい(でも、権限の移譲を忘れている)
  • 時間がない、リーダーになりたくないとか

あの状況を思い出して心が折れそうです。

リーダー不在を防ぐためには

責任者(会社であれば役員、部長とか、普通の会議とかであれば主催者)が指名しましょう。
手を上げさせることも当然ありますが、誰もいなければその場で自らが宣言するか指名します。

正直、先延ばしは無意味です。

手を上げた人がチャンスを掴むのであれば、その人が上げるかどうかという単純な話です。
先延ばしをしてチャンスを与え続ける必要はありません。

もう一言添えると

会議は「何を決める、あるいは情報共有する会議であるか」宣言して始めましょう。
目的がない会議は無意味なので、本当にやめてほしいです。


[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

BtoBマーケティングはゼロ円でできるのか

f:id:junmt:20151126190039p:plain

スタートアップや新規事業でもっとも一般的なのは投資(社内キャッシュも含む)を受けて様々な方法でマーケティングを行っていきます。

しかし、一方では投資を受けられないケースも多々あるのが現実です。

そんな中で、一般認知度を上げることが非常に難しいBtoBというカテゴリーに絞って、ゼロ円マーケティングについて分析していました。

営業プロセスにおけるマーケティングのポジション

本題に入る前に、おさらいをしておきます。

よくあるBtoBの売上までの流れは以下の通りです。*1

  • 集客 → アプローチ → 商談 → 受注 → 納品 → 売上

この流れの中で、「集客」がマーケティングに相当します。 

ゼロ円でできること

1.マーケティングのゴール設定

集客のプロセスのため、BtoBのビジネスの場合はゴールを問い合わせ、またはサービスの申し込み(トライアルを含む)に設定します。

例えば、受託開発、物販などの場合は一度訪問と見積提出がある場合が多いため、問い合わせ数がゴールとなります。SaaSなどであればWeb上から無料トライアルを申し込んだ数がゴールに設定することもあります。

そのため、これから語る手法はゴールまで誘導するための手段となります。

なお、この段階でKPIの設定は数字遊びになり無意味です。全力でやる、それのみです。

2.ページ(HP/LP)制作、SEO対策

まず、最初は新規ビジネスのホームページ、ランディングページなどページ制作を行います。

wordpress+bootstrapなどを使えば簡単です。その中で、SEO対策もバッチリと行っていきます。この辺りはネット上に非常に豊富に情報があるため、素人でもある程度プロの手法を取り込むことが可能です。

さらに、Google Analyticsを利用して効果測定を行っていきます。

数日経ってもページへの流入ゼロ

新規で立ち上げたページが上位に組み込まれることはありませんので、何もしなければ流入ゼロであっても何ら不思議はありません。

特に、BtoBビジネスのキーワードは検索ボリュームが少なく、既にレッドオーシャンであるか、あるいは新しい概念のため検索されない事態が発生しています。

ここで、「やっぱりか」とちょっとがっかりしますが、気にせず淡々とやりましょう。

3.知り合いに紹介

ページ制作と前後する部分はあるものの、これも誰しもがやることです。

ただ、知り合いの数には限りがあるため、すぐに底を尽きてしまいますし、これだけで利益を生み出せる状態になりません。

4.セミナーを開催

とにかく集客をしないといけませんので、セミナー開催をやることもあります。

ただ、自社内に会議室があることなどゼロ円でやるにはややハードルが高い面があります。

セミナー・勉強会・イベント管理ツール | Doorkeeper

ビジネス+IT

この辺りを使うことと、知り合いの会社の会議室を借りて、合同セミナーのような形にすることでゼロ円を実現することも可能です。

合同セミナーで相手先のターゲットリストを使うことができると、集客力が飛躍的に高まり、予想以上の効果を生み出すこともあります。

ただし、よほどのサービス/プロダクト力と相手との親和性がないと合同セミナーの実現自体が難しいため、実現性が分かれるところです。

5.ソーシャルメディアで宣伝

セミナーの集客の部分も含めて、facebooktwitterなどで宣伝も行います。

今まで知り合った人との繋がりが試される部分でもあります。

私はソーシャル系で積極的に友達(?)を増やしていなかったため、ちょっと後悔しました。

6.ブログを書く

要するにコンテンツマーケティングを仕掛けます。

ブログだけでなく、比較サイトやまとめサイトなども作成したり書き込みを行います。

難しいところはブログは100件ぐらいコンテンツを書かないとページビュー(PV)が上がっていかないなど、とてつもない労力をかける必要があります。

しかし、一度波に乗ってしまえば、ゼロ円の中で一番効果を発揮します。

有料広告に匹敵、あるいは凌駕します。

7.メルマガ配信

配信先リストはどうするのか、という課題はありつつも、これまでにメールアドレスを取得できた人たちに対してメルマガを配信しましょう。

週1回程度、内容は商材の紹介ももちろんのこと、関連するお役立ち情報など開封して読んでもらえる工夫をしていきましょう。

8.KPIを設定する

ここまでやってくると、そろそろ流入(PV)とコンバージョン(CV)の関係性などが見えてきます。そうなるとKPIを設定して、それぞれのマーケティング施策に対して改善を行っていきます。

1週間や1ヶ月というサービスやプロダクトの特性(リードタイムなど)を考慮して、改善と計測サイクルを決定してください。

ただし、私の経験ではBtoBビジネスであっても、最初は長くても1週間単位ぐらいの短いサイクルで回した方が良いと思います。*2

マーケティングはゼロ円でできる、しかし。

以上の施策をやって、1ヶ月経って高い効果を発揮できたのであれば、それは相当魅力的な商材を持ち合わせたか、運が良かったか、それともやった人がとても聡明だったのか、通常持ち得ないものがあっただろうと思います。

BtoBの世界で1ヶ月程度では正直ビジネスとは程遠い結果しか知りません。

最も期待できるコンテンツマーケティングの部分が効果を発揮するまで1ヶ月以上は掛かります。時間と内部メンバー(例え一人でも)の多くのコストを支払ってもゆるゆると立ち上がる形になります。

有料広告との比較

例えば、ゼロ円マーケティングで1ヶ月4,000PVだったとします。(1週間1,000PV)

facebook広告では100円=100インプレッション(広告表示)ぐらいです。

  • facebook広告に1ヶ月10万円かけると、1ヶ月で10万インプレッション獲得
  • 例えば、5%の人が対象サイトを訪問=5,000PV獲得

商材や広告の内容とターゲット層(性別、年齢、興味のあるキーワード)にもよりますが、平均5%ぐらいはいけると思います。改善を繰り返すことで、10%に引き上げることもできるでしょう。

では、金額を比較すると、

  • 0円マーケティング=1名=給与金額など
  • 有料広告=1社=10万円+クリエイティブ等の制作費など

これもいくつかのパターンが想定できるため、具体的な数字を差し控えましたが、残念ながら、金額と即効性を考えると有料広告の方がお得です。

ゼロ円でも可能だが、有料広告と組み合わせた方がいい

どうしてもキャッシュの都合でゼロ円でやらなければならない場合は、立ち上がるまでは知人の紹介などで稼ぐしかありません。あるいは今までの仕事をやりながら、新しい事業を立ち上げるような形です。

そうでなければ圧倒的に有料広告との組み合わせをお勧めします。片方だけではいずれ厳しくなります。

よくあるパターンは有料広告のみではいずれはターゲットが一巡してしまい、獲得できる顧客数が徐々に減っていくことです。減った分をケアしようとしてその他の様々な有料広告に掲載をし、気がつけば広告宣伝費が膨大に膨れ上がってしまっています。

それであれば潜在ニーズを喚起するためにコンテンツマーケティングなども地道に続けて、流入数を絶対に減らさない、増やし続ける姿勢を続けるべきです。

そうすれば、広告宣伝費を抑えつつビジネスを拡大し続けることができるでしょう。

 

[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

*1:途中のアプローチや商談の段階がないビジネスもあります。

*2:懸念として偶然の数字に影響されてミスリードしてしまうことですが、最初のうちはミスリードするような数字が出にくいため問題無いと考えています。

会社の成長に前向きになれない人

f:id:junmt:20151117130026p:plain

ごくごく当たり前の話ですが、企業の成長を目指していますか?

労働時間が短くてラクをしてお金が貰えればそれが最高、仕事よりもプライベートばかりに終始している人はいませんか?

雇われ経営者やサラリーマンだからと言って、そんな状況では経営者も現場の人も誰も生き残れません。

当たり前だとわかっているのに、なぜ企業の成長を目指せない人がいるんでしょうか。

そして、その人たちを一人でも多く会社の成長に貢献させるためにはどうしたらいいのでしょうか。

成長にも種類がある

企業が成長することは単純に新しい商品などで爆発的な広がりを見せたりすることだけではありません。

日々の危機感や課題を愚直に改善することで、品質の向上、コストの低下など様々な面で影響を及ぼし、結果として売上や利益が上がる=成長するという形もあります。

会社の成長=課題への取り組み

私のオススメは天才的アプローチ(とても魅力的でキャッチーな商品の開発)ではなく、凡人的アプローチ(課題を愚直に解決する)です。

なぜならば、確実に一定の効果を得ることができ、人のレベルに左右されづらいためです。時にはそれが変化して天才的アプローチが生み出されることもあります。 

そのため、潜在的な危機感を顕在化させて、課題として取り組むことが地道ながら確実に会社の成長に繋げる方法です。

危機感は誰が持っているのか?

どんなに売上が伸びて、どんなに楽に利益が上がったとしても、必ず誰かは危機感を持っています。

これからも売上を保つためにはどうしたら良いか、あるいは下がってしまった売上をどうやって回復させるか、利益率がじわじわと悪くなってきている、そんな悩みの中に危機感が隠れています。

皆さんも感覚的に理解している通り、会社の中で誰かしらが必ず危機感を持っています。

危機感から課題への顕在化

危機感から課題に顕在化させる方法は様々です。

例えば、社員へのアンケートや社内掲示板書き込みで募集や経営者などが部下に具体的課題として取り組むように命令するなどです。このようなことは一時的なイベントとして行われることが多く、業務に追われていると行われない場合が多くなります。

いずれにせよ共通点は経営者サイドと現場サイドのコミュニケーションを解消していることではないでしょうか。それであれば、両者の行動を変えれば、イベントではなく日常的に危機感を共有し、課題として取り組める可能性があります。

経営者と現場の状況

現場に危機感を伝えきれていない

会社の役員や部長などの上層部は会社=自分たちにとって都合の悪い事実を隠したがります。

その割には部下などには報告を求め、それができていないと報告・連絡・相談が出来ていない、社会人としての基本がなっていないと叱咤しています。

このような感じでお互いがお互いを信用していない状況が生まれているのではないでしょうか。

曖昧な情報共有や噂レベルで何かしらの課題を知っていても、そんな状況では現場は他人事だと思うでしょう。

経営者が現場の危機感を知らない

これは全く真逆の話です。

現場は肌感から、売れなくなる時期が近づいている、こんな無駄な投資ばかりしていては企業が成長するどころか、衰退してしまうかもしれない。愛想をつかせてやめていく社員が増えている。

そんな状況から業務の改善などの新しい取り組みが必要だと感じている人たちがいます。

しかし、経営サイドは売上等の数字ばかりしか見ず、当社は成長路線に乗っている、このままで何とかなると考えていたりします。

現場の気のせいなら良いですが、その声が届かずに会社が業績不振に陥ってリストラがあった会社に過去10年で2社所属していましたので、こういう経営者も一定数いることは間違いないでしょう。*1

とにかくお互いに言葉が足りていない

経営サイドから現場へ

もし、経営サイドで危機感があるのであれば、確固たる「数字」を元に現場に説明を行うべきです。極端な話ですが、売上高が毎年減って○年後の○○年×月△日に人員整理が必要になるとか言ってみたらどうでしょうか。

そのことによって、離れていく人もいるでしょうが、変革の意志と明確なインセンティブを示してあげればついてくる人も大勢いるはずです。

また、現場と経営者の距離(物理的なものを含めて)縮めて物事を言いやすい環境を考えてみたらいかがでしょうか。

現場から経営サイドへ

現場は経営者に対して懸念点を伝えてみたらどうでしょうか?

上司などマネージャーに言っても揉み消されてしまうかもしれませんので、役員など思い切って話みるのも良いかもしれません。ただ、親しくなければ口頭ではなくメールを送ってみるのが良いでしょう。

考え方としては、何も言わないよりも言って見てダメだったら考えてみるぐらいで良いと思います。もし、それによってイジメや嫌がらせなどの問題が起きたら、早くその会社を辞めるべきです。あなたの貴重な時間をそんなクズに使う必要はありません。

物事を推進するスキームが生まれる

ただ、言えることはお互いの危機感、課題意識を共通認識にすることで、物事を推進していくスキームが作られていきます。この状態になると1回限りで終わるわけではなく、絶え間なく課題が顕在化する中で一緒に解決していく人たちと解決までのサイクルになります。

やることが明確になり、行動が変わる

物事が推進されるスキームが作られることで、今まで課題の取り組み方がわからなかった人や取り組まなかった人たちが何をすれば良いか明確になることで行動が変わっていくことが多々あります。また、他の人がやっていることを真似ることで前向きに行動できる人が増えます。(残念ながら変わらない人もいます。そういう人は何をしても変わらないので、時間を掛けるだけ無駄です。)

 

これは精神論でもなんでもなく、成功のためのプロセスとして重要なことです。

成長する企業では当たり前のことであり、成長せずに衰退していく企業に足りないと感じています。

 

[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

*1:私が会社を見る目が無さすぎですが。

F-RevoCRM 6.2 Patch1がリリース

本日、F-RevoCRM 6.2のパッチがリリースされました。

f:id:junmt:20151117120041p:plain

F-RevoCRM | F-RevoCRMは、オープンソースのvTigarCRMをベースに、日本企業向けのカスタマイズを施した統合型CRMソフトウェアです

日本向けの修正が多く、日本で使うならF-RevoCRMというのは間違いがないでしょう。また、ちゃんとメンテナンスされているというのは安心感ありますね。

 

以下、会員サイトから抜粋です。

 

動作改善・不具合の修正

  • iPadからの閲覧時に画面を見やすく
  • PDF出力のレイアウト崩れ
  • エクスポート CSVエクスポート時の動作改修
  • エクスポート ファイルをExcelで開くと文字化け
  • エクスポート ヘッダー項目名にダブルコーテーションが付加される
  • カレンダー 結果が出力されない
  • システム設定 ユーザー一覧の姓名が逆
  • レポート CSVエクスポートすると文字化け
  • ログイン画面 ユーザー名/パスワードに初期値が入っている
  • 顧客企業など 詳細画面で作成者の姓名が逆
  • 顧客担当者 部署のカラムの長さが短い
  • 定義リスト インポート・エクスポート時の不具合
  • 定義リスト 選択肢が削除できない
  • 日報 コメント機能が表示されない
  • 日報 活動の取得時にタイムゾーンを意識するように処理を改善
  • 日報 上司が設定されない
  • 日報 担当を対象とした検索が行えない
  • 予定表 Googleカレンダーで一部の予定を取得できない不具合
  • 予定表 ポップアップに関連と顧客担当者を追加
  • 予定表 一覧が表示されない

未翻訳の修正

  • CSVエクスポート デフォルト項目
  • システム設定 役割のインポート
  • システム設定 項目追加
  • システム設定 レイアウトエディタ カスタムフィールド作成画面
  • インポート画面
  • プロジェクトモジュール

パッチ適用方法

以下のリンクに記載されています。

f-revocrm.jp

 

[PR] 日本でまともに使えるオープンソースCRMが出ています。

f:id:junmt:20151117120041p:plain

CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

 

時間軸集計にはパーティショニングがオススメ

今やっている案件で、過去ログAと過去ログBを結合して集計をしています。

「過去ログ」というのがポイントで、集計のことを考慮されていないデータ出力*1であったため、結合条件が時間のレンジという泣きそうな状態です。

今回は手元にMySQL5.7.9があるので、それでやってみました。

過去ログA

操作ログをイメージしてもらうと非常に近いです。
しかし、「何を」が抜けていて「誰が」「いつからいつまで」しか記録されていません。

user,start_at,end_at,time
UserA,2015-05-01 10:00:01,2015-05-01 10:01:13,72
UserB,2015-05-01 10:01:01,2015-05-01 10:01:53,52

データ量は550万件ぐらいです。

過去ログB

「何を」に相当するのがこのログです。
あまり書きすぎるとバレてしまうので、皆さんは不自然としか思えないでしょうが、「種別が」「いつからいつまで」が記録されています。

category,start_at,end_at,time
CategoryA,2015-05-01 10:00:00,2015-05-01 10:00:30,30
CategoryB,2015-05-01 10:00:30,2015-05-01 10:01:00,30
CategoryC,2015-05-01 10:01:00,2015-05-01 10:01:30,30

データ量は350万件ぐらいです。
日付は日またぎをすることはありません。(今回に限り)

やりたいこと

この過去ログA, Bを結合し、「誰が」「いつ」「何を」していたかを1テーブルに収めて、その後に集計関数を使って多角的に分析をしていきます。
(データ量が膨大なので、集計関数を使っての部分は別の何かになるかもしれません。)

まずは、1テーブルに収めるために以下のようなものが作りたいです。

user,category,start_at,end_at,time
UserA,CategoryA,2015-05-01 10:00:01,2015-05-01 10:01:13,72
UserA,CategoryB,2015-05-01 10:00:01,2015-05-01 10:01:13,72
UserA,CategoryB,2015-05-01 10:00:01,2015-05-01 10:01:13,72
UserB,CategoryC,2015-05-01 10:01:01,2015-05-01 10:01:53,52

クエリで表せば、こんな感じです。

select
  A.user,
  B.category,
  A.start_at,
  A.end_at,
  A.time
from
  LogA A
  inner join LogB B on (
    (
      A.start_at >= B.start_at and
      A.end_at <= B.start_at
    ) or (
      A.start_at <= B.end_at and
      A.end_at >= B.end_at
    )
  )
;

Aの時間帯に含まれるBを抽出し、BのcategoryをAに追加して出力します。
うーん。伝えいづらいですが、要するに「時間帯」で結合したいわけです。

実際はJavaでグリグリ回した

進捗が見えないので、LogAを1レコードずつ取ってきて、LogBを検索しました。

select
  B.category
from
  LogB B
where
  (
    :start_at >= B.start_at and
    :end_at <= B.start_at
  ) or (
    :start_at <= B.end_at and
    :end_at >= B.end_at
  )

このクエリの問題点

時間「帯」で結合するため、indexを全件舐める必要があります。
350万件というボリュームのためか、私のPCではLogAの1レコードあたり、2秒掛かりました。
そのため、550万件処理すると、「7,640日処理に掛かる」ことになります。

万策尽きたのでケーキ屋さんに転職しそうになりました。

とにかく分割!

今回のログの場合は時間で分割できるため、パーティショニングを利用してみました。

create table LogB (
  ...(中略)
)
PARTITION BY RANGE COLUMNS(start_at)
(
PARTITION p20150501 VALUES LESS THAN ('2015-05-01') ENGINE = InnoDB,
PARTITION p20150502 VALUES LESS THAN ('2015-05-02') ENGINE = InnoDB,
PARTITION p20150503 VALUES LESS THAN ('2015-05-03') ENGINE = InnoDB,
(中略)
PARTITION p20150504 VALUES LESS THAN ('2015-06-01') ENGINE = InnoDB
)

結果、1レコードあたり1.8秒に改善されました・・・あれ?

パーティションを指定してあげないと上手くいかないことがある

オプティマイザが利用するパーティションを正しく判断してくれないと、パーティション分割の意味がありません。
explainで実行計画をとってみると、不要なパーティションが検索対象に入っていました。

そのため、以下のようにパーティションを指定するクエリに修正しました。

select
  B.category
from
  LogB B partition(【対象日のパーティション名】)
where
  (
    :start_at >= B.start_at and
    :end_at <= B.start_at
  ) or (
    :start_at <= B.end_at and
    :end_at >= B.end_at
  )

0.05秒に改善

上記のクエリで1.8秒が0.05秒に改善されました。
これで、およそ3.2日で処理が完了します。

その他にやっていることとか(おまけ)

しかし、別テーブルに保存などを考えるとその他のオーバーヘッドがあり、3.2日でも全然嬉しくありません。
そのため、私の場合はjavaでスレッドを6個立ち上げ、100万件ずつ並行して処理をしています。

ログの特性もあり、550万件→550万件の保存ではなく、550万件→数千万件の保存になるため、
実行から12時間経った今でも処理が終わっていません・・・。
Core i7 MEM16GB で 4コアフル使用、常時CPU80%超え、現在2000万件保存完了)

スレッド6は50万件の割り当てのため、終了しており、そうなると数時間後には全スレッド終わるものじゃないかと思っています。


[PR] 日本でまともに使えるオープンソースCRMが出ています。
f:id:junmt:20151117120041p:plain
CRM構築はオープンソースのF-RevoCRM -エフレボシーアールエム-

*1:今後の出力ログはAとBを結合したものになるので問題ありません。