みなさんこんにちは。 Dreamforceもついに最終日となってしまいました。 今,レポートを書いている隣で、100万ドルハッカソンの発表が行われています。
一方私はBigDataについてのセッションに参加したので、BigDataについてお話ししてみたいと思います。
Salesforceで動いてるモノ
Salesforce上では5億以上のカスタムオブジェクト、8億以上のタスク、700万人超のポータルユーザ、1時間あたり1500万のレコード処理があり、今も日々増加し続けています。 その中で各組織がBigDataを扱う時に重要なことは場合は、以下の4つフェーズごとにあります。
- デザイン
- Load
- 構成
- メンテナンス
デザイン
どれだけのレコードをListViewやReportに表示すれば有用に利用できるか、それらのデータが運用上本当に必要であるか、ビューやレポートで出力するのに不要なデータを特定できるか。を考えます。
次に どのくらいのデータの増加が見込まれるか、データをアーカイブすることにより増加分と相殺する事はできるか、過去データをハードデリートことができるか?を検討します。さらに利用可能なIndexを事前に検討する事や、意味のあるListView、Report、またはSOQLクエリとなるような設計を検討します。
Load
Loadフェーズでは、DataLoad時の前にデータをクレンジングする。BULK APIを使用する。ワークフロールールやTrigger等を停止する。などを実施します。クレンジングしたデータをそれを大量データ処理に向いているBULKAPIを使用する事により迅速なLoadを可能とします。この際、ワークフローやTriggerなどが停止されていることとそれを前提としたデータの作成が重要です。 もしSkyOnDemandのような有用な移行ツールがある場合はそちらを利用しても良いでしょう。
構成
構成フェーズでは、効果的かつ、簡単な共有モデルを使用する。ロール階層を簡素化する。 1つの親レコードに大量の子レコードをひもづけるような構成は避ける。レコードのロックを防ぐ。等を考えます。 10階層以上になるロール階層や、親レコードに1万を超える子レコードをひもづける事はパフォーマンスの低下につながります。
メンテナンス
メンテナンスフェーズではまず、Indexの設定をします。カスタム項目には外部IDとユニークの設定が可能ですが、これらにチェックを入れた項目にはIndexが張られますね。 しかし、Index項目は1オブジェクト3つまでしか設定できません。よりIndexを張りたい場合にはSalesforceにリクエストする事によりカスタムインデックスを設定してもらう事ができます。この場合 実際のSOQLをSalesforceサポートに送付しSalesforceが有用と判断したときにのみ設定されます。
また、Skynny Tableをリクエストする事も可能です。これによりパフォーマンスの向上が期待できます。 あとは使用していないデータのアーカイブや、非正規化なども有用です。 Salesforceもこれらの対応を行えばBigDataも十分なパフォーマンスと運用が可能になります。
さて、今年もDreamforceですが、とても興味深い発表がいくつもありましたね。 私は帰国したら早速CLIを弄り倒してみたいと思います。