• Home
  • コーポレートブログ Geniee’s BLOG
コーポレートブログ

Geniee’s BLOG

ジーニーは最先端の広告テクノロジーで
顧客の収益を最大化します。

ClickHouseのテーブル構成を考え直してみた


今回が二度目の投稿になります。ClickHouse Meetup TokyoでジーニーのLT(Lightning Talk)を担当しました、R&D本部 元 基盤技術開発部の犬伏です。(現所属はマーケティングテクノロジー開発部)

記事その1: 「ClickHouse Meetup Tokyo」イベントレポート

記事その2: 「ClickHouse Meetup Tokyo」エンジニアレポート

LT担当者の視点からイベントを振り返りました。

今回の記事:「ClickHouseのテーブル構成を考え直してみた」

Meetupの後、過去に弊社で作成した構成をどのように修正したかを概説します。


目次

  • はじめに
  • 2017年に本ブログで紹介した内容の振り返り
    • 紹介した構造の説明
    • 紹介した構造の問題点
  • 新規に構築した構造の決定過程
    • 複数あり得たPARTITION構造
    • 頻出クエリ抽出
    • 性能評価の結果
    • 性能評価結果についての考察
  • 新規に構築した構造の詳細
  • 新規に構築した構造への移行手順
  • おわりに
  • おまけ
    • text_logについて

はじめに

昨年の ClickHouse Meetup からはだいぶ時間が経ってしまいました。部署異動に伴う業務のキャッチアップ、研修やBootcampなどが重なり、3月中としていた本記事の公開がとても遅れてしまい、申し訳ありませんでした。

前回の記事の公表後、ClickHouseのドキュメントに日本語版が(多くがまだ機械翻訳ではありますが)できたり、Changelogが整備されたり、昨年のMeetup内容にも触れたQiitaに記事が投稿されるなど、じわじわと日本でも広がりを見せているかと思われます。(ほんまか?)

2017年に弊社ブログで紹介した内容の振り返り

紹介した構造の説明

まずは、過去に弊社で作成した構成がどのようなものであったかを振り返ります。

テーブル構造:

  • 1日単位のデータを保持する日毎テーブル ( records_YYYYMMDD = SummingMergeTree(…) ) を作る
  • 1日単位のテーブルをまとめた全期間テーブル ( merge_recordes = Merge(…, ‘^records_[0-9]{8}$’) ) を作る

集計値の更新:

  1. 定期的に一時的な日毎テーブル( tmp_records_YYYYMMDD = SummingMergeTree(…) )を作り、ここへINSERTして新しい日毎テーブルを構築
  2. 新しい日毎テーブルの数値の妥当性を検証し、怪しければ警告を発して中断
  3. RENAME TABLEにより対象の日毎テーブルを差し替える

紹介した構造の問題点

弊社では現在、この構造にレプリケーションを加えた構造のクラスター「V2」と、これにさらにシャーディングを追加してデータ量も増やしたクラスター「V3」の2つのClickHouseクラスターがあります。

V2、V3それぞれの場合について、どのような問題が、どの程度の深刻度で存在していたかを説明します。

  • P1. 全期間テーブルへのクエリは大量の資源を消費し、かつ時間もかかる
    • 全期間テーブルは、V2ではマージテーブル、V3では分散テーブルのマージテーブルという構成であるが、それぞれが性質の異なった問題を生じる。
    • マージテーブル(V2): マージテーブルは内部的にはマッチするテーブル全てに対してクエリを発行する。例えば3年分のデータがDBに入っていれば、内部的には1000を超えるクエリが発行される。マージテーブルへのクエリの結果はこれらすべての内部クエリに対する結果を得るまで返されないので、最悪ケースに引っ張られてトータルでは時間もかかってしまう。特に日付横断的でフルスキャンに近いようなクエリの実行ではメモリ不足に陥ってしまう場合がある。
    • マージテーブル+分散テーブル(V3): マージテーブルの配下に分散テーブルが存在する場合、上記に加えてもっと厄介な問題が発生する。ClickHouseでは分散テーブルへのクエリに対しては他のシャードからデータを取得する必要があるが、マージテーブルによって N 個の内部クエリが発生した後、さらにシャードの数 S に対し、 S-1 個のコネクションが生成され、これと同じ数のクエリが外部シャードに対して発行される。デフォルト値は 1024 ( 根拠はこちら ) なので、年単位のデータを入れていけばすぐに限界が訪れる。また、 ClickHouse v19.7.3.9 時点ではこのようなクエリを投入すると再起動以外では ( KILL QUERY でも ) 停止できないクエリが生じてしまうという問題があった。 ( 注: 実験は行っていないが、この問題はこの修正で解消しているかもしれない。 )
  • P2. 大量の Replicated テーブルは ZooKeeper XID を高速に消費し XID overflow エラーを頻発させる
    • Replicated テーブルは、毎分ZooKeeperに対してリクエストを行うが、リクエストの度に順序一貫性を保つための XID をインクリメントする。これは符号付き32bit整数であるが、これは数千のテーブルに対しては一週間持つか持たないかという程度の猶予であり、また XID overflow となった場合、一時的にではあるが ZooKeeper とのセッションが断絶する。これは次のような問題を生じている
      • 一時期はより重篤な不具合があり、一部のテーブルが readonly になってしまうという状況もあったが、 ClickHouse v19.7.3.9 では改善されている。
      • また DROP TABLE などがアトミックな処理になっておらず、途中のZooKeeperリクエストが失敗すると中途半端な状態で放置される場合があったが、こちらも改善される見込みである。
    • このように、セッション断絶による致命的な不具合は既に修正されているものの、当時のバージョンにおいては INSERT や CREATE TABLE が中途半端に失敗することはあまり好ましい状況とは言えないため、弊社ではやむなく clickhouse-server を定期的に再起動し XID をリセットすることで対処しているが、これもやはり一時的とは言え部分的には可用性・耐障害性が低下しているため、望ましくない。
  • P3. RENAME TABLE の操作が遅延する場合がある
    • 置き換え対象のテーブルに対して実行中のSELECTがあると、ロックが解除されるまで実行されない。そのため、時間のかかるクエリがロックを開放しなければ、データの反映が遅延してしまう状況がある。
    • RENAME TABLE によってデータを更新するのは「V2」のみであるため、この問題については本記事では扱わない。

P1. によるメモリ消費は、仮に1日分のデータを集計するクエリであっても、インデックス ( 詳細はこちら ) が効かないような条件を指定すれば、その列はすべてメモリ上に展開されるため、全期間分の条件列がメモリ上に展開され、大きなメモリ消費に繋がります。 ( これは日付範囲で絞っているつもりのクエリでも、書き方が良くなければ同じ状況が発生します。これについては後述します。 )

単にこの問題に対処するだけであれば、1日分の結果を得る場合に限り、全期間テーブルではなく日毎テーブルを参照すれば良いのですが、期間が1日ではなく1週間や1月といった単位になってしまうと対応できなくなる他 ( 注: merge table function を使うことでこの問題には対処できるが、この機能を使うためには、 readonly=2 以上の権限が必要となる。この権限を持っていると、 max_memory_usage の変更など、管理者側が望まない設定変更も行うことができてしまうため、望ましくない。 ) 、「V3」では時間軸が一次元ではない(後述します)ために、この対策も良い解決策とはなりませんでした。

また P2. によるサーバー再起動は、タイミングを制御して行っているためクラスター全体としての可用性は保っているもの、再起動の時間帯にはそのサーバーで実行中のクエリが失敗してしまうため、クエリ単位では失敗してしまう確率を上げてしまっていました。

そこで、クラスターの安定性を向上させるとともに、あわよくば応答速度も高速化しようという目的で、抜本的にテーブルの構成を変更することとなりました。

新規に構築した構造の決定過程

新規にテーブル構造を設計するにあたり、これまで登場していなかったパーティションという概念が必要になるので、先にこれを説明します。

次に、 Partitioning key をどのように選択したかを順を追って説明します。Partitioning key は通常データの取り回し方から決定されるもので、ClickHouseでは月単位でのパーティショニングが推奨されていると言えるでしょう (注: 明言されているドキュメントがあったか定かではないが、想定する最大のパーティション数が1000-10000とされているほか、多くの例示において toYYYYMM が用いられている) 。

しかし私たちは、とある理由でパフォーマンス上の問題も考慮する必要がありました。この経緯や詳細については「複数あり得たPARTITION構造」で述べます。

次に私たちは、最終的なテーブル構造を選定するため、実際によく叩かれているクエリを集め、それらの典型的な集計期間を定めて、それぞれの構造に対してパフォーマンス計測を行いました。この手順の詳細及び結果、考察については「頻出クエリ抽出」及び「性能評価の結果」、「性能評価結果についての考察」で述べます。

複数あり得たPARTITION構造

私たちのClickHouseテーブルには、キーとなる日時 DateTime 型のカラムが2つあります。やや込み入った内容になるので、一旦進みたい方は、「統一時刻」と「現地時刻」という意味の違う2種類の日付が必要になった、とご理解ください。

★☆★ 込み入った説明ここから ★☆★

前提知識:

  1. ClickHouseの DateTime 型は時刻をUNIXタイムスタンプで保持する。
  2. UNIXタイムスタンプにはタイムゾーン情報は含まれない。UNIXタイムスタンプとタイムゾーンの組み合わせで、はじめて「ある国・地域のタイムゾーンでの時刻」を表現できる。

一つは正当なUNIXタイムスタンプを記録するカラムで、従ってすべての行が同じタイムゾーンで記録されるものです ( 説明のため「統一時刻」と呼びます ) 。

もう一つがトリッキーで、海外での配信成果の集計をその国・地域でのタイムゾーンに沿って行うために、「タイムゾーンをUTCとして取得すると現地での時刻を得られるUNIXタイムスタンプ」を記録するカラムです ( 説明のため「現地時刻」と呼びます ) 。例えば日本時間 (JST, UTC+9) であれば、通常のUNIXタイムスタンプに9時間分、 32400 (秒) を加えたものを記録します。こうしておくことで、UTCとして取得したときに、9時間進んだ時刻を取得できます。 ( 注: 本当は行ごとにタイムゾーン情報を保持できれば最も望ましかったのですが、そういった機能はなかった上、たとえあったとしても「現地時刻」の取得で計算が必要になるため、「統一時刻」と同等のクエリ性能を発揮しにくいため、 DateTime 型で2種類の時刻を保持するのが最も高速に要求を実現できると判断され、このような構成となりました。 )

★☆★ 込み入った説明ここまで ★☆★

私たちは日本時間での時間 (hour) 単位で集計してデータベースへの投入を行っていたため、再集計のことだけを考えれば、日本時間での日単位でパーティショニングしてしまえばよいのですが、その後に行われるバッチ類のSELECTクエリでは各国・地域のタイムゾーンでの日単位で行っているものも多く、これらについては日本時間での日単位でのパーティショニングのみであると、パーティションの中からは該当するものを発見できなくなり、すべてのパーティションのインデックスを参照しに行くことになってしまいます。

このオーバーヘッドがどの程度かを見積もるため、私たちは日本時間の日単位のみのパーティショニングと、日本時間の日単位と現地時間の日単位の組による二次元 (注: 見た目上は二次元ではあるものの、日本時間と現地時間の差分は一定の範囲に限定されているので、パーティション数の増え方は線形オーダーです。) のパーティショニングの両方を試そうと考えました。

頻出クエリ抽出

さて、パフォーマンステストのためには妥当なベンチマークが必要です。しかしこのベンチマークの用意は当初想定した以上に厄介なものでした。

クエリをいくつか用意すれば良い、と漠然と考えていましたが、実際にどういうクエリが速いと嬉しいかとなると、単純に全件取ってくるとか、特定の1列だけを取得してくるとか、集約単位 (group by) の細かさはどうするかとか、自由度が高すぎてわからなくなってしまいました。

そこで、実際に使われているクエリを16個程度 (注: 数は勘で決めた) 集め、それらの結果がどの程度改善するかを見ることでベンチマークとする、という方針を立て、クエリを集め始めました。このテーブルを使っているチームに「こういうクエリを使っているとか、こういうクエリが早くなると嬉しいとか、教えてください」と呼びかけ、協力を求めました。

しかしここでも課題が生じました。エンジニアに質問するとたいていバッチ処理のためのクエリが返ってきますが、実際に飛んできているクエリを見てみると、ビジネス側の社員も社内のRedashを経由してそれなりの数のクエリを投げていることがわかりました。こういったクエリもできるだけベンチマークに組み込みたくなりました。

そして最終的には、クエリログ (注: 公式ドキュメント: https://clickhouse.tech/docs/en/operations/system-tables/query_log/) からよく飛んできている、あるいは資源を多く消費しているクエリを集めることにしました。

しかし、クエリを集めると言っても、通常テンプレートとなるクエリが存在し、実際に投入されるクエリはその中の文字列や IN 節の括弧内、数値など、様々な部分が変化します。この部分を同じに扱ってやらないと同じクエリとみなすことができず、回数のカウントが漏れてしまいます。そこで私たちは次のようなクエリを作り、これを調査しました。

SELECT
    replaceRegexpAll(
        replaceRegexpAll(
            replaceRegexpAll(
                replaceRegexpAll(
                    replaceRegexpAll(query, '(--.*?)?\n', ''),  -- コメント・改行除去
                    '\\s+', ' '),                               -- 連続する空白文字を同一視
                '\\s*\\d+\\s*', '0'),                           -- 数を同一視
            '0(,0)*', ' 0 '),                                   -- 数・数列を同一視
        '\'.*?\'', '\'\'') AS query_template,                   -- 文字列を同一視
    any(query) as query_sample,
    count(*) AS execution_count
FROM
    system.query_log
WHERE
    is_initial_query                -- ユーザーが直接投入したクエリを対象とする
    AND
    NOT match(query, '.*INSERT.*')  -- INSERTクエリは除外する (INSERT ... SELECT は使っていない)
GROUP BY
    query_template
ORDER BY
    execution_count DESC
LIMIT 64
FORMAT Vertical

replaceRegexpAll によって、実際に実行されたクエリをそのテンプレートのようなものに変換して、この数を数えることで実行回数を調べました。

実際にはこのあと、バッチかヒトかを推測するためや使われなくなった古いクエリを除外するためにクエリの実行周期を調べたり、実行時間やメモリ消費量などの指標も加えて取得するようにするなども行いましたが、割愛します。

性能評価の結果

性能評価にあたって、テーブル構造以外に一つ注視すべき設定項目がありました。分散テーブルのマージテーブルに対しては ClickHouse v19.7.3.9 時点では誤った結果が返却されるため使えなかった、 distributed_aggregation_memory_efficient (注: 公式ドキュメント: https://clickhouse.tech/docs/en/sql-reference/statements/select/group-by/#select-group-by-in-external-memory) という設定項目です。(長いので、以下 DAME と略します。)

分散テーブルのマージテーブルという構成をやめ、パーティションを使うことにした結果、この設定項目も使えるようになったので、これを有効化した場合にそれぞれの構造でどの程度パフォーマンスが向上するかも加えて評価することにしました。

よって性能評価は以下の5種類の比較となりました。

  1. base(旧構成)
  2. single(新構成、日本時間のみのパーティショニング)
  3. single_DAME(新構成、日本時間のみのパーティショニング + DAME )
  4. twin(新構成、二次元のパーティショニング)
  5. twin_DAME(新構成、二次元のパーティショニング + DAME )

また、集めたクエリは以下の13個となりました。

  • No.3(頻度3位、現地時間で細かい単位で集約する、大量の行を返す重いクエリ)
  • No.5(頻度5位、現地時間で細かい単位で集約するが、結果行数は少ないクエリ)
  • No.7(頻度7位、現地時間で細かい単位で集約する、大量の行を返す重いクエリ)
  • No.8(頻度8位、日本時間で「直近24時間」を粗い単位で集約する軽いはずのクエリ)
  • No.9(頻度9位、日本時間で「直近28日間」を粗い単位で集約するちょい重いクエリ)
  • No.100(人間がたまに叩く、重いが速いと嬉しいクエリその0)
  • No.110(人間がたまに叩く、重いが速いと嬉しいクエリその1)
  • No.19(頻度19位、日本時間で、決められた4時間の間隔のデータを無差別に合計する監視用クエリ)
    • このクエリでは、旧構造についてのみ、日本時間での1日分のデータのみを集約していることを利用して、全期間テーブルではなくその日の日毎テーブルを直接参照するという最適化を行っている。
    • またこのクエリでは PREWHERE での最適化が行われておらず、インデックスで範囲を絞れないようになっていたため、実質的に意味のないベンチマークとなってしまった。
    • しかしながら、No.919にて最適化されたものの結果も得ているのでこちらを信用すれば良い。(呼び出し箇所は後で書き換えました。)
  • No.29(頻度29位、日本時間で、1ヶ月間のデータを荒い単位で集約するクエリ)
  • No.903(頻度3位を筆者が最適化したもの)
  • No.905(頻度5位を筆者が最適化したもの)
  • No.907(頻度7位を筆者が最適化したもの)
  • No.919(頻度19位を筆者が最適化したもの)

ベンチマークの計測方法は次のとおりです:

  • それぞれのテーブル構造に対して、若いナンバーから順に一つずつ実行していきます。これを9回繰り返します。
  • 他のクエリと重複する範囲をSELECTするなどによって有利不利が生じないよう、最初の2回の結果は捨てます。(注: この間に、データがOSによってキャッシュされることを期待します。)
  • その後の7回から、「最速値」及び「期待される値」を計算します。「期待される値」には、7回のうち遅い2回を除いた5回の平均を使います。(注: クラスターそれぞれの計算資源やネットワークなどを再現することが難しかったため、本番環境上でベンチマークを実行した都合上、運悪く他の重いクエリと同時に動作した場合に不利になってしまうのを回避しようという意図です。)
  • 実行エラー(すべてメモリ制限超過と確認済み)になった実行の実行時間及びメモリ消費量は、例外処理が面倒だったのでそれぞれ 999,999 ms , 999,999,999,999 Byte に設定しました。
  • パフォーマンス計測の際には、クラスター上でのクエリの実行についてのみ興味があるため、 FORMAT Null を指定することで結果を捨てています。
  • 結果の集計では、実行時間やメモリ消費量の統計をあとから楽に計算できるように、それぞれのクエリの先頭に定型コメントを付与した上で、あとからまとめてクエリログを参照しました。このようにしたことで、集計の計算も含めてクエリログに対するクエリ内で完結させることができました。

ベンチマーク結果は次のとおりです:

  • 左側は、大雑把に緑色が最良、薄いグレーが次点(1.2倍以内)、赤が最悪、白はその他です。中央のグラフは左側の対数プロット、右側のグラフは最良を1としたときの相対値です。
  • 上から、最速実行時間、期待実行時間、最小メモリ消費量、期待メモリ消費量です。

テーブル構造のSELECT性能比較

性能評価結果についての考察

実行速度上は、全体的に twin_DAME が多くの最善を叩き出しており、最速を逃した6つのうち4つはDAMEでないほうに僅差で負けているのみで、残った7番は全体的に僅差であり、19番はもともと勝ち目のない比較を行っているため考慮する必要がありません。

次にメモリ消費ですが、横並びから19番、905番、919番にてやや twin 系が多くのメモリを消費する傾向が見て取れます。

このことから、テーブル構造としては二次元の構造を採用することとしました。

ここからは蛇足ですが、No.3の旧構造では結局全ての実行がメモリエラーで落ちてしまいました。一応本番で何度かは成功しているはずのクエリなので、定常的なメモリ負荷があったのかもしれません。

またNo.3からNo.9までは無視できない確率で(少なくとも9回に1回以上は)メモリ不足で失敗してしまうことがありましたが、クエリを書き直すことである程度症状は緩和できています。(それでもNo.905では8倍近く時間を使ってしまっていますが…)

新規に構築した構造の詳細

ということで、旧来の「分散テーブルのマージテーブル」という構造は、「パーティション付きのReplicatedSummingMergeTree」という構造に置き換えられることになりました。

DDL上は、日毎テーブルの名前から日付部分を取り去って全期間テーブルのように改め、以下の Partitioning key の指定を加えるのみです。しかし、私たちの場合は後述する移行手順のために、直接古いマージテーブルを上書きすることはせず、別に新しい名前で新しいテーブルを作り、それのみを含むマージテーブルを新しく作って古いマージテーブルと差し替える ( RENAME TABLE ) という方法を取りました。

この部分をマージテーブルではなくビューテーブルを使うことも検討しましたが、 PREWHERE が使えなくなるなどマージテーブルの場合と比べて互換性を維持できなかったために棄却されました。

結局、マージテーブルの部分がパーティションに変化しただけであるため、基本的には旧来の全期間テーブル向けにかかれているクエリであれば書き換えなく動作します。(書き換えることでさらに速くなる可能性はありますが…)

CREATE TABLE our_database.shard_reports ON CLUSTER our_cluster
ENGINE = ReplicatedSummingMergeTree(...)
-- ここから
PARTITION BY (
    toYYYYMMDD(現地時刻みたいな日時カラム, 'UTC'),
    toYYYYMMDD(普通の日時カラム, 'Asia/Tokyo')
)
-- ここまで
ORDER BY ...

新規に構築した構造への移行手順

ディスク容量に余裕があったので、新しい構造でテーブルを作り、そこへINSERTの速度をプロダクトに影響が出ない範囲に抑えつつデータを流し込むことで基本的には対応できました。

しかし、ある程度時間のたった範囲のデータについては既に確定しているので特に考慮することなく入れ直すだけで済みますが、直近のデータは常に古いテーブルのほうへ流入してくるので対応にやや苦慮しました。

また、参照しているクエリをすべて把握しているわけでもなかったため、ユーザーからは同じテーブル名のデータが差し替わることが期待されました。

そのため、一度古いテーブルへのデータの流入を止め、直近分のデータを新しいテーブルに入れてから、互換性のためにマージテーブルを差し替え、その後新しいテーブルに向けてデータの流入を再開する必要がありました。この手順を時系列で表すと次のようになります。

概略詳細・遷移条件
A: 確認用の数値を取得D, G あたりで確認するため、過去分の各列の合計等を取得

(直近分は B のあとに行うが、過去分は分量が多く実行に時間がかかってしまうので、先に行っておくとよい)

B: Flinkを停止Flinkを停止し、ClickHouseへのデータ流入を止める。

【ClickHouseへの流入が止まったら goto C】

C: バッチを停止本当は長時間かかる可能性があるクエリは全部止めたいところ、 E 向けの布石
D: 直近データ移行すべてのreplicaについてreplicationが完了していることを確認したのち、直近分のデータを旧テーブルから新テーブルにINSERT

【数値の一致を見たら goto E】

E: 全期間テーブル置き換えRENAME TABLE によって行う

【入れ替え完了が確認されたら goto F】

F: Flinkを再開新しいテーブルの方にINSERTするように変更するのを忘れない(忘れるとだいぶ面倒なことに)
G: みまもる大丈夫そうならCで止めたバッチを戻す

様子がおかしかったら臨機応変に対応

テーブル構造更新の手順

この手順により、実際には無事「臨機応変に頑張る」ことなく移行を完了することができました。

おわりに

今回は、2017年に弊社ブログで紹介した内容を振り返り、そこで紹介されていたClickHouseのテーブルについて構造上の課題を指摘し、これをより良い構造で再構築した過程を、順を追って説明しました。

特にメモリ使用量やクエリの応答速度で悩まれている方は、パーティションを用いた構造に修正されることをおすすめします。

もし「次回」があれば、ClickHouseクラスターのバージョンアップ( v19.7.3.9 to v19.16.14.65)についての記事になるかと思います。

おまけ

text_log について

text_log は ClickHouse v19.14 以降で使える機能で、 /var/log/clickhouse-server/clickhouse-server.log に出ていたClickHouseのログをデータベース上のテーブルにも保存することができます。

特に、「何時頃のこういうエラーログ」という条件さえわかっていればすばやくログにアクセスできる、どういうエラーがどういうタイミングで発生しているのかの調査など、テーブルとして存在していることによる恩恵は大きいと感じました。

ただし、 system.query_log と同様にストレージ容量を食いつぶす可能性もあるので、パーティショニングや容量の監視は常に行う必要があります。

公式ドキュメント: https://clickhouse.tech/docs/en/operations/system-tables/text_log/

設定の書き方等参考PR: https://github.com/ClickHouse/ClickHouse/pull/6164/files

Date
Author
エンジニアの視点から、様々な技術、サービス開発秘話、イベントをご紹介していきます。 ジーニーエンジニアチーム
Tag

ジーニーは、2020シーズンから東京ヴェルディクラブとマーケティングパートナーシップ契約を結びました。アドテクノロジー、マーケティングテクノロジー分野で事業を拡大するジーニーが東京ヴェルディクラブとパートナー契約を結んだ経緯、今後の展望について、両社代表を始めとする参加者同士が熱く語り合いました。

対談参加者
【一般社団法人東京ヴェルディクラブ】
・eスポーツ選手 YUKI様
・フットサル選手 山田ラファエルユウゴ様
・理事長 森本 譲二様
【株式会社ジーニー】
・代表取締役社長 工藤智昭
・マーケティングテクノロジー事業本部コマーシャル営業部部長 石井賢

――今回、パートナーシップを結ぶに至った経緯をお聞かせいただけますか。

ジーニー代表取締役社長・工藤智昭(以下、工藤):子どもの頃からのサッカーファンで、特にヴェルディは一番好きなチームだったので、今回のご縁をとても嬉しく思います。今回ヴェルディさんのスポンサーをさせていただこうと思った理由が2つあります。まず我々はBtoBの企業様相手に取引をしており、もっともっと我々の事業を広く知ってもらいたいという思いを持っています。まずは、スポーツ界を牽引する東京ヴェルディのファンの方々、スポーツのファンの方々を起点にしたいと思ったからです。2つ目の理由は社会貢献、ビジネスで収益を作るだけではなく、スポーツなどの支援していきたいと考えました。

ジーニー 代表取締役社長 工藤智昭

世界で共に戦うパートナーに
一般社団法人東京ヴェルディクラブ理事長・森本 譲二氏(以下、森本氏):ヴェルディファミリー、サッカーチームも含めたヴェルディ全体でジーニーさんと共に世界に向けて進んでいきたいと思います。
ヴェルディは、25年前のJリーグ創成期にはカズ(三浦知良)、ラモス(瑠偉)北澤(豪)を擁し、日本代表イコールヴェルディという輝かしい時代がありましたが、2010年頃に厳しい経営難に陥りました。そのタイミングで現社長の羽生英之を迎えました。当時Jリーグの事務局長だった彼が東京ヴェルディの社長に就任し、今日に至っています。

一般社団法人東京ヴェルディクラブ 理事長 森本 譲二様

工藤:2010年がヴェルディ様の節目だったのですね。当社も、2010年創業です。日本発の世界的なテクノロジー企業を作ろうという思いで起業しました。

森本氏:ご縁を感じますね。その後10年の間、東京ヴェルディは踊り場に留まり、J2におります。私が経営に参画させていただいた2018年、J1参入プレーオフ決定戦でジュビロ磐田と対戦したのですが、惜しくも負けてしまいました。

この頃から、東京ヴェルディはサッカー以外でも日本でチャレンジしています。今、野球チーム、バスケットボールチーム、ハンドボールチーム、陸上競技チームなど延べ18のクラブチームがあります。ヴェルディの名の下に様々なチームが集まり、この2年で、東京から世界を目指していくんだ、というチームの集合体に成長してきました。

工藤:我々も世界を目指しています。設立3年目から海外展開を開始し、現在ではシンガポール、ベトナム、タイ、インドネシアのアジア4カ国に進出しています。マーケティング・業績の改善をするソフトウェアを提供し、アジア中の企業の成長に貢献しています。

森本氏:創業間もない頃から世界を目指して拠点を構えていらっしゃるのは、とても勉強になります。ジャンル・活躍の場所を広げる過程で我々が痛感したのは、良くも悪くも我々はスポーツ村、スポーツビジネスの中で、国内で仲間を集めてきたということです。
eスポーツチーム中心に、世界にプロモーションするにはどうしてもIT、マーケティングテクノロジーが不可欠です。しかしなかなか有効な手立てが見当たりませんでした。そんな時、ジーニーさんの「世界に、日本から本気で挑戦する」というメッセージに強く感銘を受けました。

スポーツ×ビジネス×ITの融合で世界を目指す

森本氏:スポーツやテクノロジーは、これからボーダレスに、世界を超えて挑戦していかなければならない。世界に挑んでいくヴェルディのパートナーに、パートナー以上の存在にぜひなっていただきたい、そう思い、まずフットサルチーム、eスポーツチームのビジネスパートナーになっていただきたいとお願いに上がりました。

工藤:私はこの10年、高い志を持って会社を経営する、そしてお客様や会社で働く社員を含めた周りの人を全部幸せにしたいと考え、挑戦し続けてきました。ビジネスとのバランスを取りながら、人々の幸せをつくり、我が社が世の中から必要とされる存在であり続けたい。高い志をもつヴェルディ様とも、共に成長し、チャレンジをできるパートナーでありたいと思っています。

森本氏:ありがとうございます。日本のスポーツ界は、スポンサーシップは契約することがゴールになってしまうことも多いんですが、私たちは深いコミュニケーション、パートナーシップを築いていける関係でありたいと思っています。
我々がいかにジーニーさんに対してお役に立てるのか。ジーニーさんがヴェルディと組むことで、宣伝効果もそうですし、既に拠点を持っておられるアジアから世界に打って出るひとつの起爆剤として、お役に立てればと思っております。

ビジネスとスポーツの知見を共有し、両社のパワーを拡大につなげる

ーー具体的に、どのような取り組みをしていくのでしょうか。

ジーニー・石井賢(以下、石井):既に、マーケティング事業領域では取り組みが進みつつあります。ファン拡大、認知向上などのマーケティング施策に加えて、我々がサービス開発・販売しているCRMなどの顧客管理ツールを活用していただき、ヴェルディファンの方との関係強化の一助となればと思っています。メルマガ配信、ヴェルディさんが力を入れているスクール事業での生徒様の管理などが挙げられます。
単にツールを使うだけでなく、ビジネスを拡大していくための包括的な取り組みとして知見をお互いに共有し、両社のパワーを拡大していければと思っています。
ヴェルディさんはサッカーのイメージが強いですが、18ものクラブチームをお持ちですし、今回協業するeスポーツやフットサルはこれからどんどん伸びていくと思いますので、協力させていただければと思っております。

ジーニー マーケティングテクノロジー事業本部コマーシャル営業部部長 石井賢

ーー今日はeスポーツで活躍されている山田選手とフットサルのYUKI選手にもお越しいただいています。今後ジーニーとパートナーとして関わっていくにあたり、今後の目標やジーニーに期待することを教えてください。

フットサル・山田ラファエルユウゴ選手:私は選手として活動しながら、フットサルスクールでユースチームの子どもたちへの指導もしています。チーム全体のレベルアップが図れるようにしっかり頑張りますので、ご支援いただければと思います。

フットサル 山田ラファエルユウゴ選手

eスポーツ・YUKI選手:少し自己紹介をさせていただきますと、普段は半導体の専門商社でビジネスマンとして働いていまして、競技者としても活動しています。その中で今、YouTubeチャンネルに力を入れております。
現在ゲームのプレイ動画を主にYouTubeに上げているのですが、チャンネルの登録者のほとんどが実際のプレイヤーです。今後、ファン層拡大のためにビジネスマンの方や上の世代の方々をどうやって取り込んでいくかが私自身の課題のひとつです。
ゲームに限らず、普段の仕事や競技前後の様子も含め、魅力を発進していきたいと思っており、SNSマーケティングの知見、ジーニーさんのツールなどを最大限活用させていただきたいです。いちビジネスマンとしても今回のパートナーシップは非常に興味があるところです。

eスポーツ YUKI選手

キーワードは「多様性」。世界を広げることでお互いに強くなれる

ーー最後に、工藤さん、森本さんから今回のパートナーシップについての展望をお聞かせください。

工藤:我々の持っている技術・ノウハウを最大限に活かし東京ヴェルディさんに貢献したいです。またインドネシア、ベトナムをはじめとしたアジアでも大きなビジネスをしていますので、東京ヴェルディさんのファンをアジア中で増やしていきたいと思っています。

森本様:キーワードは多様性だと思います。ジーニーさんとご縁をいただいてYUKI選手、山田選手も共に語り合う。このことは、ヴェルディにとってものすごくいいことだと思います。ビジネス界と関わることで我々も刺激を受けてよりよく成長できますし、サッカーだけではなく、様々な種目が加わることでヴェルディは強くなると思っています。
ジーニーさんが持つ、テクノロジーの技術をぜひ我々も使わせていただき、両社の資産を築いていきたい。ジーニーさんが持っておられる高い志を我々も共に目指し、世界と戦っていくだけの目標と文化に並ばせていただきたいと思っています。

工藤:力強いお言葉をありがとうございます。これから、ぜひ共に頑張っていきましょう。

こんにちは、R&D本部基盤技術開発部の内木です。

私は現在ジーニーで主にGenieeDSPの入札部分のロジック実装などを行っています。今回はDSPの入札ロジックに欠かせないCTR(Click Through Rate)予測について、またそれを支えるデータ分析・処理環境についてご紹介します。

CTR予測とは

DSPは広告主に広告を出す機会を提供するプラットフォームです。広告主は費用を使って様々なメディアに広告を出すことで、商品購入など何らかの効果を目指します。弊社を含め多くのDSP事業者では以下で決まるCTRを予測することがDSPにとって重要な機能の一つとなっています。

CTR <- (広告が表示されて、クリックされた回数) / (広告が表示された回数)

CTRを予測するには、どのメディアに出すかはもちろんですが、メディアの中での広告の位置、出される広告コンテンツの内容、広告を見ているユーザーの特性・OS情報など、多様な情報を考慮する必要があります。より良いCTR予測を行うには日々変わる広告パフォーマンスの傾向を考慮した予測モデルで日々改善・修正していく必要があります。
ジーニーの広告表示回数は約800億/月の規模です。この規模のログを様々な軸でデータの傾向を頻繁に確認するために、弊社ではデータ処理・分析環境を整備しています。

データ処理・分析環境

ジーニーではCTR予測モデルをはじめとして、大規模なデータ処理・分析の一部をGCP上で行っています。GCPでデータを処理する大きな理由の一つとして、BigQueryが自由に使えることが挙げられます。

BigQueryでは数TBのデータでも基本的な集計処理なら早くて数秒、ウインドウ関数やJavascriptで記述できるUDFをはじめとした負荷のかかるデータ処理でも多くの場合数分もすれば結果が返ってきます。本番環境でこのような負荷のかかる処理が本当に必要かは慎重に考える必要がありますが、こういった環境はアドホックな処理・調査の効率や頻度などデータ全体に対して大きく影響してきます。

CTR予測モデル作成をBigQuery上で完結させることはできませんが、機械学習には欠かせないデータの前処理・調査で使われています。今のアーキテクチャでは前処理されたデータはGCS(Google Cloud Storage)を通してGCE(Google Compute Engine)に送られ、予測モデルの学習を経て作成されたモデルは再度GCSを通して広告の配信サーバーに渡され、日々新しい予測モデルが更新されていきます。

終わりに

今回はCTRについての説明やBigQueryをはじめとしたデータ処理基盤など、弊社のデータ分析の一例を説明させていただきました。
ジーニーではデータ基盤の運用方法から機械学習などを利用したプロダクトのロジック改善方法に到るまで、データ活用をより盛んにしていくため開発環境をまだまだ改善していきたいと考えています。今回ご紹介した内容に興味を持っていただければ幸いです。

Date
Author
エンジニアの視点から、様々な技術、サービス開発秘話、イベントをご紹介していきます。 ジーニーエンジニアチーム
Tag

ジーニーは2020年4月、創業10年を迎えました。新型コロナウイルスに見舞われながらも、スピードを緩めることなく、攻めの姿勢で成長を続けようとしています。この10年のジーニーの歩みと代表取締役社長・工藤智昭の想いを、改めて聞きました。


改めてブランドステートメントを定義したのは、次の10年に向けて会社を「変えよう」と僕も仲間たちも考えたから。自分たちの文化を変え、「ジーニーらしい文化」をきちんと浸透させたいと思ったんです。

創業まもなくジーニーが爆発的に伸びるきっかけを作ったのは、北海道の主婦のブロガーさんでした。我々のサービスを使って広告収益を伸ばし、ブロガー仲間に広めてくれたことで顧客が一気に増えた。「クライアントの成功を共に創る」という今のブランドミッションの原点です。


それが、アドテクの一領域でナンバーワンを目指して競合との厳しい競争を繰り広げるうちに、社内外に歪みが生じていました。。信頼関係をクライアントや会社の仲間と、いかに強い絆をつくっていくか。テクノロジーの先進性と人の誠実さが一体となって初めて、「価値」を作っていけるのだと改めて実感しました。

新しくマーケティングテクノロジー分野に本格的に進出するタイミングで、原点に立ち返る決心をしました。「テクノロジーの力でお客様の成功を創って、世界を変えていくんだ」と。

ジーニーは、創業から10年、熱い想いとアイデアを持った人たちが業種や立場にかかわらず議論し、イノベーションを起こしてきました。会社が大きくなるにつれて、僕自身が直接一緒に仕事をする人が限られてくる。それでも、「ジーニーらしさ」を常に忘れず、仲間の皆といい仕事をしたいと思っています。

創業10年を経て思うこと。社員と、会社の変化

ブランドパーソナリティが進化して、いい会社になってきていると思います。自分のやりたいことを追求するためではなく、社会的使命のために動こうとする人が増えています。僕はチャレンジし続けるのが好きだし、24時間ビジネスのことを考えていても本当に楽しい。「いつも先頭に立っている」とも言われるけれど、”世界的なテクノロジー企業”は社員みんなでつくり、育てていくもの。それができるだけの人材が集まってきているし、次の10年はこれまで以上に成長できると感じています。そして、その成長を社会に還元していきたいと思っています。


社員とつくっていく、これからのジーニー、そして新たな社会

社員のみんなにはいろんなことに挑戦し、成長してほしいです。これからのジーニーの10年は「10の新たな事業を創る」という事業創造、拡大のフェーズ。このチャレンジは、他社ではなかなか経験できないものだと思う。これを実現するために、リモートなどの働きやすい環境を作りながら、イノベーティブでスピーディな成長を実現する、というハイブリッドなスタイルを実現できるように整えていきたいと思います。

世界はコロナ以後、大きく変わっていく。企業活動のIT化、オンライン化が一気に進み、ジーニーのプロダクトはもっと必要とされる時代になっていくと思います。これからも、企業の皆様に必要とされ、社会に貢献できる会社であり続けたいと思います。

Date
Author
ジーニー広報

はじめまして。ClickHouse Meetup TokyoでジーニーのLTを担当しました、R&D本部 基盤技術開発部の犬伏です。

前回の記事: 「ClickHouse MeetupTokyo」イベントレポート

今回の「ClickHouse Meetup Tokyo」エンジニアレポートでは、LT発表者の視点からイベントを振り返ります。

次回の記事:「ClickHouseの構成を考え直してみた」では、Meetupの後、過去に弊社で構築された構成をどのように修正したかを概説します。


目次

  • ClickHouseとは
  • Meetupの所感
  • 弊社LTの発表スライド
  • 弊社LTでの質疑応答まとめ
  • まとめ、今後について

ClickHouseとは

ClickHouseは露Yandex社が開発するオープンソースの列指向のDBMSであり、行指向のDBMS(例えばMySQL)とは得意分野の異なるDBMSです。

今回の本題は別のところにあるので、ClickHouseそのものについての説明は省略します。

ClickHouseそのものの詳細については以下のリンク先を参照ください:

Meetupの所感

Meetupを開催したことによるメリット

  • LT発表用のスライドを作成する過程で、
    • 現状のシステムについて、開発上のこれまでの経緯や現状の構成などへの理解が深まった
    • ClickHouseそのもののドキュメントを再読することで、忘れていた機能や追加された新機能に気付けた
  • ClickHouse開発者の方々に現状の構成や課題に対してアドバイスをもらえた

Meetupの様子は前回の記事: 「ClickHouse Meetup Tokyo」イベントレポート をご覧ください。

MeetupのYouTube配信: https://www.youtube.com/watch?v=728Yywcd5ys
ClickHouse開発チームの発表スライド: https://github.com/ClickHouse/clickhouse-presentations/tree/master/meetup34

弊社LTの発表スライド

弊社LTでの質疑応答まとめ

※ 注意:回答で例示される挙動は、 ClickHouse 19.7.3.9 の挙動を元にしていますので、新しいバージョンでは挙動が異なる可能性があります。(Yandex社のAlexeyさんによる回答を除く)

質問1. クエリの静的解析について「共通部分式削除」とあったが、同じサブクエリもキャッシュされるのか?

  • 回答 by Alexey (Yandex)
    • No.
    • Usual expressions are cached. Similar expressions will be executed only once.
    • But sub-queries are not.
  • 補足
    • スライドでの私の意図は、例えば下に示すクエリAで、 SUM(x) が一度のみ計算されるというものでした。
    • しかし、サブクエリに関してはキャッシュされないため、同じ意味の表現であっても書いた回数だけ計算され時間がかかってしまうようです。

クエリA:

SELECT
    SUM(a) / SUM(x),
    SUM(b) + SUM(x)
FROM default.test

質問2.冗長構成にして欲しいと言われているのですが、どんなところを気をつければいいか?

  • 回答
    • replication(データ複製)をしてくれるテーブルエンジン(table engine)が用意されています。
    • ZooKeeperをコーディネータとして利用することで、テーブルとして同期を取ってくれます。

質問3. INSERT後にそれが反映されるタイミングはサーバーごとに異なる?

  • 回答
    • はい、ただし正常な設定では1秒程度以下の遅れです。(Replicatedなテーブルを想定して回答)
  • 補足
    • Replicatedなテーブルの場合には、一度ZooKeeperを経由するため、反映は同期しません。
    • DistributedテーブルにINSERTした場合、データがそれぞれのshardに分散されるため、INSERTが完了したと応答した時点と、SELECTの対象になるタイミングは厳密には一致しません。
    • 当然INSERTが詰まったりすればその限りではないが、スループット内の範囲であれば1秒も見ておけば十分
      • INSERTが詰まる場合の例:大量のデータのINSERT、頻繁過ぎるINSERT、一度に多くのパーティションにINSERTされるようなINSERT、貧弱すぎるレプリカ間の接続など

質問4. ClickHouse自体の監視はどのように行っているのか。内部のmetricsをexportしているのか?

質問5. 監査用のログ(誰がログインして、誰がどういう操作をして、という情報)は取得可能ですか?

質問6. 2年前のジーニーの記事の構成をもとに分散テーブルを使ってデータ分散(sharding)をしている状況で、前日のテーブルの内容を差し替えたい。どうすればいいか?

  • 説明
    • サーバーが1台の時にはうまく行くが、複数サーバーでshardingを始めたらつらくなった。
    • 弊社の記事の構成では、分散テーブルを使っていなかったので、テーブルの差し替え方法が説明されていなかった。
  • 回答
    • Distributedテーブルに INSERT すれば勝手にデータが分散されるので、これを利用します。
    • 手順は次の通り:
      • 昨日分の一時テーブル tmp_reports_YYYYMMDD と、これを参照する Distributed テーブルtmp_dist_reports_YYYYMMDD を作る
        • この際、トップレベルのMergeテーブルの正規表現に tmp_dist_reports_YYYYMMDDテーブルがマッチしないように注意すること(さもないと昨日分のデータが重複することになる)
      • tmp_dist_reports_YYYYMMDD に対して更新するデータの INSERT を行う(裏で勝手に sharding される)
      • すべてのサーバー上の tmp_reports_YYYYMMDD について sharding と replication が済むのを待つ
      • RENAME TABLE reports_YYYYMMDD TO trash_reports_YYYYMMDD, tmp_reports_YYYYMMDD TO reports_YYYYMMDD ON CLUSTER <cluster_name>をすると、全 shard のテーブルが入れ替わり、データの差し替えが完了する
    • ただし、過去の弊社の記事による構成は運用上望ましくないため、次の記事「ClickHouseの構成を考え直してみた」にて詳述する構成自体の改善方法に従って構築をやり直すことをおすすめします。

質問7. 日毎にテーブルを持つ構成の問題点

  • 説明
    • 2年前の弊社の記事の構成を見て、同じように日別のテーブルを持って同じように失敗している。どう解決すればよいか。
  • 回答
    • 例えば、次のような運用上の不都合が発生します:
      • 数年分のデータ(つまり数千個のReplicatedテーブル)を保持していると、数日に1回程度の頻度で XID overflow によりクエリが失敗するようになります。
        • このため、数日に一度、XID overflow が発生する前にサーバーを再起動して ZooKeeper XID をリセットするといった運用が必要になります。
      • SELECTの際に、Mergeテーブルがまずサーバー内で数千のDistributedテーブルへのSELECTに分解されるため、他のshardへのSELECTがすべてのDistributedテーブルから独立して行われ、結果connection が不必要に大量に乱立することとなり、ConnectionPool が枯渇し、Cannot schedule a taskに至ることがあります。
        • こうなったクエリは応答不能( KILL QUERY で殺せない)となることがあり、サーバー再起動でしか対処できなくなります。
        • 特に ConnectionPool すべてを確保した状態で応答不能になると、他のクエリ実行も不可能になります。
      • テーブルがたくさん存在するため、列の追加や削除などのテーブル構成に対する操作が非常な手間を伴います。
    • 次の記事「ClickHouseの構成を考え直してみた」にて詳述する構成自体の改善方法に従って構築をやり直すことをおすすめします。

質問8. 自社では1クラスターあたり少ない台数でClickHouseを動かしているが、最大どのぐらいまでスケールするのか

  • 回答 by Alexey (Yandex)
    • How big can ClickHouse cluster be?
    • 600 servers, but this is not the biggest cluster.
    • A Chinese company uses more than 1000 servers.
    • ClickHouse can scale.

質問9. 障害後の復旧の自動化など、運用上の工夫等あれば

  • 説明
    • 運用していて、Replica か ZooKeeper cluster が死んで、CREATE TABLE ができなかった
      • ZooKeeper cluster がダウンしたら Replicated Table は readonly になる
  • 回答
    • 以下の公式ドキュメントにまとまっている。
    • Replica が死んだ場合の回復方法
      • 新しいサーバーにClickHouseをインストールし、Replicatedテーブルを正しいZooKeeperパスとともに作成し、ZooKeeper及び既存のクラスターと接続すれば、自動的にreplicationが行われ、いずれ追いつきます。
    • ZooKeeper cluster が死んだ場合の回復方法
      • ClickHouse replicated tables will be readonly mode. INSERT cannot be performed.
      • ZooKeeper itself has also a replication.

質問10. 中国で1000台の ClickHouse cluster があるとのことだが、そのクラスターの ZooKeeper はどうなっているのか?

  • 回答 by Alexey (Yandex)
    • That company does not use ZooKeeper.
    • Yandex uses 3 ZooKeeper servers and this is the recommended configuration.
    • How to better configure ZooKeeper:
      • Use SSDs.
      • 10M nodes -> typical amount of memory is 128GB of RAM.

まとめ、今後について

  • 今回は、(著者が社内のClickHouseの構成変更を終えたため、まずは)Meetupの振り返りを投稿しました。
  • 次回の記事:「ClickHouseの構成を考え直してみた」では、Meetupの後、過去に弊社で構築された構成をどのように修正したかを概説します。
  • 次回の記事は2020年3月中に公開予定です。
  • 予定目次は次のとおりです:
    • 2017年に弊社ブログで紹介した内容の振り返り
      • 紹介した構造の説明
      • 紹介した構造の問題点指摘
    • 新規に構築した構造の決定過程
      • 複数在り得たPARTITION構造
      • distributed_aggregation_memory_efficientの設定
        • 注意:過去に紹介した構造(Merge of Distributed)にこの設定を使用すると、ClickHouse 19.7.3.9では期待しない動作をしますのでご注意ください!!
      • 頻出クエリ抽出
      • 性能評価の結果
    • 新規に構築した構造の説明
    • 新規に構築した構造への移行手順
    • おまけ
      • 19.7.3.9以降の重要な更新について
      • PREWHEREについて
Date
Author
エンジニアの視点から、様々な技術、サービス開発秘話、イベントをご紹介していきます。 ジーニーエンジニアチーム

こんにちは。広報の飯田です。

先日ジーニーの社内報用に社長 工藤と19新卒メンバーによる対談を行いました。

トークが弾み過ぎて誌面に収まりきらず、
せっかくなので今回その一部をブログでご紹介させていただくことにしました!

写真左から
優 昌晟(ゆう しょうせい)
R&D本部 マーケティングテクノロジー開発部

工藤 智昭(くどう ともあき)
代表取締役社長

玉木 光(たまき ひかり)
営業統括本部 マーケティングテクノロジー営業部

 

-今回は新卒メンバーから工藤さんへの質問を用意してもらいました。まずは優さんからお願いします。

優)新卒視点では、仕事は辛さを乗り越えて成長していくものだと思っています。逆に、経営者視点では、仕事とはどの様なものですか?

工藤)仕事は、自分の強みで世の中に貢献をすること。
自分の歩んできた人生、乗り越えてきた仕事以上のアウトプットは出せないし、
究極的には自分の人生の存在意義を確認できるものだよ。

みんな一人ひとり、必ず強みと弱みがある。
良いところって悪いところの裏返しなので、良いところが凄く尖っている人は、悪いところも凄く尖っていたり大きい場合もある。
それでいいんだよ。

一人ひとりの強みを足し合わせて、より大きな影響力を世間に発揮できるもの、それが会社だと思う。
一人でやれることは小さい。大きな仕事をするにはチームが必要だ。

あとは有名な経営者に教わったものだと、
「仕事っていうのは、挑戦して乗り越えることに意義があって、自分の器や可能性を広げ続けるのが人生だ」ってこと。

別に何歳になっても成長できるし、
大変なこともあったけど、乗り越えれば乗り越えるほど、仕事はできるようになるね。

お金や名声とか、自分が欲しいと思うものは、乗り越えた後にどんどんついてくる。
なので、そっちを目的とせずに、まずは成長とかにベクトルを置いて20代を駆け抜けた方がいいと思う。

優)ありがとうございました。仕事を通してできることを増やし、いつかは社長のように自分の強さを世界に還元して行ける人になれるよう、頑張ります。


-続いて玉木さんお願いします。

玉木)工藤さんが若手時代に身に付けた考え方で、今も大事にしている考え方はありますか?

工藤)人の話を聞いてちゃんと理解するのって凄く重要だと思うね。

若いころ、先輩が言っている事が難しかったり、抽象度が高い話をされると何言っているかわからない時も、理解できるまで頑張ったね。
理解が遅くても一つひとつ復習したり整理したりした。

そのうちに、頭の中が良く整理されていると言われたことがある。ちゃんと理解をすると返答が正確で早くなる。
時間はかかったけど、ひとつひとつ頑張ってきてよかったと思う。

ミーティングしていても、意外とお互い理解しあえていないまま進んだりして、それに気付けていなかったりする。

世の中、話したがり屋の方が多いので、皆の話をまとめられる人の方がバリューを出せる。
リーダーのやるべきことってそうだとも思うし
みんなの話を聞いて、正しい方向に判断して向けていくとかね。

あとは逆境を乗り越えるほどいいなと思っている。

僕が新卒時代のリクルートでも商品が強い部署だと、商品を持っていくだけで、あまり説明をせずに広告が売れた。同じ同期でも全然商品力がない部署に配属される人もいた。逆境を乗り越えてきた人の方が強くなっている。自分の実力と商品の実力を勘違いしてはいけない。

私も周囲の人から見ると大変そうと言われるような仕事を進んでやっていた。キャリアで2つの選択肢があった場合に実力のつく方をいつも選んだ。逆境というか壁を乗り越えて、結果血肉となったと思う。

玉木)小さなことを若手のうちからしっかりと積み上げることが、結果大きな成功に結びつく。ということですね。少し仕事に慣れてきた僕ら新卒にとって、改めて噛み締めるべき教訓だと思いました。

-工藤さんから2人やジーニーメンバーに伝えたい事があればお願いします。

工藤)社内にいい人材が増えてきて、将来楽しみな人が沢山出てきてるのが嬉しいね。

色んな人を見てるけど、心根が美しい人、素直な人はやっぱり伸びる。

インターネットで短期的にはうまくいくテクニックも多く出回ってしまってるが、長期的にはうまくいかんだろう。ずる賢かったり、プライドばかり高い人にはならんで欲しい。最後に自分が一番損をしたり苦しむことになる。転職が簡単になった時代だからこそ、組織の中で信頼できる人に良い仕事や権限が集まるようになってきている。

努力しているかどうかって他人から見えない部分が大きい。見え方だけ頑張ったり、ずるしようと思えばある程度はバレないのだけど、長くは続かない。昔ほど厳しく指導できなくなった時代だから、若くても自分で自分を律することができる人が伸びる。

・注目されてなくても、一つ一つ丁寧に仕事する。一つ一つの約束を守る
・他人の気持ちがわかる人になろう。上司や周囲が仕事の機会をくれたり、サポートしてくれることに感謝をする。
・失敗しても人や環境のせいにしないで自分の実力不足と思って、次は成功してやるぞって努力する。
・顧客や上司の期待に自分なりにこたえようとする。

そういう人が着実に育つ。遠回りのようにみえても、ジーニーだけでなく、世の中に大きな影響をだせるようになる。

二人は素直だからもっと伸びると思う、これからの活躍に期待してるよ!

-皆さんありがとうございました!

 

新卒ならではの真っすぐな質問と、それに対する工藤の真摯な回答に、わたしも考えさせられました。

2019年も残り僅か。
年末でせわしなくなりがちですが、初心を忘れず、素直な心で新年を迎えたいと思います。

Date
Author
ジーニー広報

こんにちは。広報の飯田です。

今回は、先月ジーニーオフィスで日本初開催されたエンジニアイベント「ClickHouse Meetup Tokyo」についてご紹介いたします!

<目次>

●ClickHouse Meetupとは
●イベント経緯
●イベントの様子
●まとめ、今後について

 

●ClickHouse Meeupとは

まずは「ClickHouse」についてご紹介します。

・ClickHouseはオープンソースのデータベース管理システム
・ロシア最大の検索エンジンを構築するYandex社が開発している
・ビックデータ集計・分析におけるパフォーマンスの高さが特徴
・ジーニーの広告配信プラットフォームでも利用しており、配信レポート用のデータ処理に活用したところ速度が1,000倍に向上した事例(※1)もある

このClickHouse啓蒙のためにYandex社が世界各国で開催しているのが「ClickHouse Meetup」です。

※1:当社実績値(https://geniee.co.jp/blog/2017/07/20/1825/)

 

●イベント経緯

東京でのMeetup開催を企画したYandexメンバーですが、
日本ではClickHouse導入企業がまだ多くはない事や、日本初開催になる事から、アドバイザーを求めていました。

そこで、かねてよりClickHouseを活用していたジーニーのエンジニアに相談を持ち掛けたのがきっかけです。

相談を受けたジーニーのエンジニアが社内展開したところ、会社総出で協力ムードになり、ジーニーオフィスでの開催に至りました。

「困っている人がいたら助ける」「学び続けるビギナーズマインド」「グローバルレベルの仕事をする」、
ジーニーのBrand Personality(行動規範)がしっかり実行されていますね!

 

●イベントの様子

当日はたくさんの方にお越しいただき、会場は満員御礼!
中には、はるばる京都からお越しの方も!


YouTubeでのライブ配信がされる中、各セッションが進行します。
・YouTube配信 https://www.youtube.com/watch?v=728Yywcd5ys

<前半セッション>
・ClickHouseの紹介
(Yandex社 Olga Khvostikovaさん)

・ClickHouse活用事例
(ジーニー R&D本部 犬伏)


<飛び入りライトニングトーク>
・Amazon Linux上のHaskellからClickHouseを使う話
・データ分析を最適化した話
・ClickHouseで実装されているHyperLogLogについて
・AWS S3をストレージとして使って失敗した話

その場での急な募集にも関わらず、皆さん即興で発表!

Yandexメンバーも興味深く聞いていて、発表後のQAも飛び交いました。

▲登壇orいい質問をすると、オリジナルチェブラーシカが貰えます

<後半セッション>
・ClickHouseの導入ガイド
(Yandex社 Alexander Sapinさん)

・ClickHouseのKafkaエンジンについて
(Yandex社 Ivan Lezhankinさん)

 

●まとめ、今後について

各発表を聞きながら「これ便利そう!」「こう使うとどうかな?」とジーニーメンバーは早速自社への活用方法を議論していて楽しそうでした。

また、参加者の方々からは「ジーニーの技術ブログを見てClickHouseを知り、興味を持ちました」という声が度々あがり、ジーニーの技術力が信用されている事や、情報発信の大切さを実感しました。

▲集合写真

▲ジーニー×Clickhouse

ジーニーは、今回のイベント開催を通じてYandexメンバーと深まった絆を技術に活かし、今まで以上に世の中に価値を提供できるサービスを創りあげてまいります。

Meetupの発表内容詳細は改めて本ブログにて公開予定です。
お楽しみに!

また、ジーニーでは一緒に働くエンジニアメンバーも募集中です!
最新技術を取り入れながらの開発にご興味のある方、ぜひお待ちしています!
ジーニー採用サイトはこちら(https://geniee.co.jp/recruit/

Date
Author
ジーニー広報

こんにちは、人事部の今村です。
今回は10月6日(日)に行われた2020年度入社の新卒内定式についてお伝えします!

ジーニー西新宿本社のラウンジで行われた内定式に集まったのは
ビジネス職22名 エンジニア職20名 計42名の内定者。
昨年に引き続き採用人数は40名を超え、ますますジーニーの成長が期待でき、今から楽しみです!!
「ジーニーのことをさらに知り入社の心構えを持つ」をテーマに、今年は以下のコンテンツを実施しました。

第一部代表挨拶
祝辞
内定証書授与
内定者自己紹介・抱負発表
第二部会社とは/ジーニー事業紹介
詳細な職種説明会
キャリアに関するワーク
当事者意識のスタンス研修

<第一部>内定式

まず、午前の内定式では以下のコンテンツを実施しました。
・代表挨拶
・祝辞
・内定証書授与
・内定者自己紹介・抱負発表

代表 工藤の挨拶から内定式が始まりました。
工藤からは
「テクノロジーを使いこなすことに慣れていて、
情報に触れるのも得意な若いみんなには沢山のチャンス
がある、是非つかんで欲しい」
「仕事をして成果を出すうえで最も大切なものはスキルではなく、誠実な人間力である」
というメッセージがありました。

また祝辞を担当したR&D本部 エンジニアの月澤からは
「社会人になることは高い技術力を突き詰めるだけでは足りず、
技術を使って顧客に価値を返す必要があり、
それがプロになるということである。技術力が高いことに越したことはないが、
お客さんに価値を返
すことを考えられる人になって欲しい」
「自分も新卒で入社した時は全くプログラミングができず、
周りがすごい人に見えて不安だったが
今部長をしている。
皆さんも不安だと思うが、ジーニーがプロに育てるから安心して入社してほしい」

ということが伝えられました。

その後、44名の内定者全員に一人ずつ自己紹介・抱負の発表をしてもらいました。


抱負では
「就活の軸は『適切な情報を適切に届けたい』だった。
ジーニーではどんな業務もそれに繋がると思うので、
皆から学んで精いっぱい成長していきたい」

「丁寧な仕事ぶりを意識したい、
社内でもお客さんにも信頼してもらえるように頑張りたい」

「圧倒的努力が好き。ジーニーを世界的な会社に持ち上げていきたい」
といった何とも頼もしい言葉が沢山聞けました!
ジーニーの内定者は、自律的であり、真面目に努力できる人が多い印象です。

また自己紹介では
ボクシング/レスリング/パワーリフティングを頑張っているという体育会系から
クラブでのDJ/マジック/ゲーム配信が趣味というインドア派まで様々な内定者がいて盛り上がりました。
そして何故か筋トレにはまっている内定者が多い印象でした(笑)
余談ですがジーニーでは「心身ともに健康に」をBrand Personalityに掲げており、社内にも筋トレに励んでいる社員が非常に多いです。

 

<第二部 研修・ワーク>

午後は各部の部長、マネージャーより以下の説明があり、その後ワークが実施されました。
・会社とは?
・ジーニー事業紹介
・詳細な職種説明/職種別 社員の一日の紹介
・キャリアに関するワーク
・当事者意識のスタンス研修

実はこのコンテンツも、内定者からの「もっと具体的にジーニーの仕事や事業を知りたい!」という意見を反映し今年から実施したものです!内容盛り沢山ですね。
当日使用したスライドを少し公開します。

 

▼R&D本部 部長月澤からエンジニア内定者へ
「素晴らしい技術が世界を変えるわけではなく、
素晴らしい技術をどう使うかが世界を変える。
ジーニーのエンジニアは顧客の成功を創るエンジニアで在って欲しい」

というメッセージが送られました。

また研修は質疑応答やグループに分かれてのワークを織り交ぜながら進められました。

ビジネス/エンジニア、男性/女性、学部生/院生などごっちゃ混ぜにしたチームでワークをしてもらいましたが
どのチームも活発に議論していました!素晴らしい!

 

まとめ

出席者を対象とした内定式後のアンケートでは
「社会人としての心構えを社長の方から聞くことができたので、ジーニーという会社の価値観がよく分かった」
「同期全員の自己紹介を聞けてよかった」
「それぞれ顧客に対してどういった意義があるのかまで説明してもらえたので、よりモチベーションが上がった」
「エンジニアのことだけでなくビジネスのことも知ることが出来たので良かったと感じた」
「全体的に内定者の気持ちに寄り添っていただけていることを強く感じました。ありがとうございました」
「情報量が多く、とても濃い時間を過ごすことができ、入社のための意識を持つきっかけになった」
といった、前向きな感想が多く寄せられました。
約7時間の長丁場でしたが、「ジーニーのことをさらに知り入社の心構えを持つ」を
達成できた内定式だったと思います。

あと入社まで半年。
みなさんの入社を社員一同、心待ちにしています!

 

Date
Author
社風やジーニーでの働き方などをご紹介していきます。 ジーニー人事チーム

こんにちは。R&D本部の萩原です。
Yandex社が中心となって開発しているClickHouseの日本初Meetupイベントがジーニーオフィスで11/14(木)に開催されます。
※過去のClickHouseの記事はこちら

ClickHouseとは?

ClickHouseはYandex社が開発しているオープンソースの優れた列指向データベース管理システムで、ジーニーでも利用しています。
従来のアプローチに比べて数十〜数百倍の処理速度で動作し、SQLクエリを使用してリアルタイムで数十億行・数十GBのデータを集計・解析できます。
加えて、スケーラビリティや耐障害性も備えており、複数のデータセンターにまたがってデプロイすることもできます。

列指向DBといった意味ではRedshift等は気軽に触ったことある人はいるとおもいますが
ClickHouseは日本では使われているケース使ってみたケースはあまりないと思っています。

 

ClickHouse Meetup Tokyo 2019

当日は以下の内容を予定しています。

1.Yandex社によるClickHouseのイントロダクション
2.GenieeによるClickHouseの導入事例
3.参加者によるライトニングトーク
4.Yandex社によるClickHouseの将来展望について
5.懇親会

今回のmeetupでは、事例やLTを通じてClickHouseの知見や体験を共有できると思いますのでお気軽にご参加ください!
また、事例等のLT参加メンバーもお待ちしています!

登録はconnpassよりどうぞ

Date
Author
エンジニアの視点から、様々な技術、サービス開発秘話、イベントをご紹介していきます。 ジーニーエンジニアチーム

こんにちは。広報の飯田です。

最近は駅前の大型ビジョンだけでなく、タクシー車内や書店、スーパーの食品売り場など、様々な場所でデジタルサイネージ広告を見かけるようになりました。

ジーニーではこういったデジタルサイネージの広告配信に携わる「DOOH※1事業」を展開しています。
※1:DOOH:Digital Out of Homeの略。街中の大型ビジョンや駅に設置されたデジタルスクリーン等、自宅以外の場所、屋外で接するデジタルな広告のこと。

このたびジーニーのDOOH事業実績を評価いただき、デジタルサイネージ業界団体「デジタルサイネージコンソーシアム(DSC)」の定例会に登壇してまいりましたので、その様子をご報告いたします!

 

目次

・デジタルサイネージコンソーシアム(DSC)とは
・定例会の様子
・ジーニー登壇パート
・まとめ、今後について

 

【デジタルサイネージコンソーシアム(DSC)とは】

デジタルサイネージ産業が直面する課題の解決と新市場の創出、生活シーンにおけるサイネージ体験価値の向上をミッションとして活動している業界団体です。広告事業者以外にサイネージメーカーやコンテンツ企業、通信企業、システム開発企業等、107社※2が加盟しています。
公式サイト:https://digital-signage.jp/
※2:107社:2019年10月8日時点

【定例会の様子】

当日はDSCに加盟している企業の担当者60~70名が参加し、会場は満席。
プログラムは、冒頭にDSCの活動報告や業界の最新ニュースについて情報共有が行われ、その後会員プレゼン(ジーニー登壇パート)、ゲストプレゼン、の構成となっています。

▲満席の会場

【ジーニー登壇パート】

ジーニーの登壇は、取締役の廣瀬とR&D本部部長の月澤が務めました。

ジーニーはアドテクノロジー事業で創業し、現在の規模まで成長を遂げてまいりました。このアドテクノロジーの領域は10年以上の歴史の中に多数の事例があり、それらを経て市場が形成、最適化されてきた背景があります。

▲ジーニー取締役 廣瀬

「ジーニーがアドテクノロジー領域で培ってきた、
広告プラットフォーム構築やビジネス開発をDOOH領域でも再展開することで、
広告主や広告代理店、メディアやロケーションオーナーがよりビジネス拡大・加速できるようにスキームを整え、
日本のDOOH市場の発展に貢献していきたいと考えております。」

アドテクノロジー領域からDOOH領域へ応用できる具体的な事例としては、既にリリース済みの協業事例(https://geniee.co.jp/news/20190607/182)や
OEM提供事例(https://geniee.co.jp/news/20190809/192)を中心に、
ビジネスや技術開発でのトピックをご紹介させていただきました。

 

▲ジーニーR&D本部部長 月澤

 

【まとめ、今後について】

デジタルサイネージ業界はまだまだオフライン固有の非効率さがあり、
ジーニーのアドテクノロジーが入ることで、オンライン化し効率化されるところが多くあります。
私たちが既にアドテクノロジーで培った技術によって、
メディアオーナーの方々は楽に現状のマネタイズを強化し、
買い手側の方々もより効率的にDOOHメディアを売買できるようになります。

今年の2月から、ジーニーでは本格的にDOOH領域での広告配信プラットフォームを通じたエコシステムの構築に挑戦してまいりました。
既に複数の広告主や広告代理店、DOOHメディアと連携しており、その対象は毎月拡大していることから、実際に市場の成長性を感じております。

ジーニーはこれからも、日本のDOOH市場の発展に貢献するサービスを提供してまいります。

▲DOOH市場の活性化に貢献していきたい

講演内容の詳細にご興味のある方、事業についてご相談のある方は、お気軽にお問い合わせください!
ご一緒にDOOH領域を更に活性化させるお取り組みができれば幸いです。

お問い合わせ:
株式会社ジーニー DOOH事業担当
TEL : 03-5909-8174  Email : DOOH@geniee.co.jp

Date
Author
ジーニー広報
Back to top