2016-07-04こんにちは。ファームノートクラウド開発グループの谷内です。年に設立された企業です。サービスの企画や営業、顧客サポート/コンサルタント、経営状態の見える化を行うITサービスの提供、などをワンストップで行っています。国内の多くの企業はITシステム開発を外注しているかと思いますが、ファームノートではエンジニアを雇ってすべての機能を内製開発しています。私は社内SEとして、牛の個体/群管理機能をクラウド上で提供するサービス「Farmnote」の製品開発に携わっています。サービス開発では「あまり触れる機会のない技術」を選定し、採用してきました。今回は、その技術を5つほど紹介します。database"とは、値が時間経過で変化していく様子を記録するデータベースです。以下のような特徴があります。いった商用データベース製品には搭載されていますし、普通の機能なのかと思っていたのですが、WEBサービス界隈ではあまり聞かないようです。おけるイベントとして記録しています。発生した過去の事実と、未来の予定としての双方のイベントが入力されます。それらのイベントを時系列に並べて計算し、イミュータブルなテーブルを生成します。そのテーブルには、「家畜が現在どのような状態にあるか」を数百種類に及ぶ計算済みのプロパティとして保存します。それらは例えば、1頭単位の牛の生理状態などを表しますが、集約することで群の繁殖状況や農場全体の経営状態についても算出します。よって計算された結果を、テンポラルデータベースに書き込むことにより、任意の過去の時点で農場がどのような状態であったのか?将来の時点では農場はどのような経営状態となるのか?を知ることができるようになります。上に独自に実装しました。設計された正規化されたテーブル群となっています。時系列のイベントは計算のためだけでなく、そのままビューとして照会可能であり、家畜の履歴として見える化することにより牛肉のブランド化や生産効率化に利用されています。計算結果のテーブルは、ユーザーが自由に検索条件を組み立ててクエリを実行可能としており、結果は常に数ミリ秒で返ってきます。仕組みを利用して計算結果は非同期的に受け取る設計にすることが多いでしょう。採用しながらも、すべてが同期的に動作しており、どのような操作を行っても即時にすべての要素が再計算されて反映されます。これらの仕組みは軽量であり、AWSの格安なt系のRDSインスタンスでも十分に実現できます。database上述のような「計算結果を同期的に提供する」アーキテクチャは如何にして実現できるでしょうか?ワーストケースでは、ほんの少し値が書き換わるだけで、その牛の10年間に渡る数千のイベントを再計算しなければなりません。その計算というのは、例えば抗生物質の投与による出荷禁止期間や、適切に繁殖コントロールされているかの指標の算出といったものです。ここでは次のことが起こります。処理もあり、普通のアーキテクチャでは手に負えない感じがします。いうインメモリデータベースで検証を行いました。