Posts for: #Food

レンタカーを予約した

1時前後に寝て6時に起きた。前日から母が泊まっていて、母は5時ぐらい起きて作業し始めるので必然的に朝起こされる。部屋を掃除してくれたのできれいになった。

ストレッチ

今週もお仕事に忙しくてあまりストレッチもウォーキングはできなかったものの、前週から中殿筋 (ちゅうでんきん) の張りはずっと残っていて、今日もトレーナーさんによく伸ばしてもらったものの張りが強いなと言う印象がある。今日の開脚幅は開始前168cmで、ストレッチ後169.5cmだった。前週とほぼ同じで現状維持ちょっとよくなったぐらいかな。ボールを使った中殿筋のストレッチが気持ちよくて疲れたときによくやっているけど、やっぱり1人でやるストレッチには限界があって、誰かに押してもらったり伸ばしてもらったりする方がよく効く。

三ノ宮・元町観光

親族が来ているので観光案内してきた。うちの会社のオフィスなども紹介した。三ノ宮・元町でショッピングして、南京町で豚まんや小籠包を買い食いしてきた。お昼は 饂飩の四國 という老舗のうどん屋さんに入った。前からお店は知っていて、いつか入りたいなと思いつつ、やや価格帯も高いのでうどんだとちょっと高いかな?とも思っていたけど、今日初めて入ってみて食べたらおいしかったので価格は妥当と言える。私はおろし醤油焼きなすうどんを食べた。コシがあって長い麺はそれだけでもおいしかった。天ぷらが豪華だったので、接待などで天ざるや天丼をお勧めするのもよさそう。

オリックスレンタカー

住んでいるところに一番近いレンタカーに オリックスレンタカー がある。前に一度借りたことがあって、そのときは普通にお店に行って明日借りたいと言えば予約できた。今日も同じノリで明日借りたいと言ったら予約が埋まってますと返された。仕方ないと思って次に近いトヨタレンタカーで尋ねてみたけど、同様に予約が埋まっていますと返された。ネットで探すかなぁと思って、試しにオリックスレンタカーのアカウント作成して、予約検索してみたらちょうど探していたコンパクトサイズで予約できた。ほんの1時間前は予約で埋まっていると店員さんが言っていたのに、、、と思い返しながらいくつかのケースを考察した。

  • 私が質問して帰った後にたまたまキャンセルが出た
  • 店舗予約とネット予約の在庫を別で管理していて、店舗予約在庫はなくなっていたが、ネット予約在庫だけ残っていた
  • 店員さんが在庫を勘違いしていて実は1車だけ残っていた
  • Web の予約システムがバグっていて実は在庫がないのにネットから予約できてしまった
  • ネット予約すると近くの他の支店で余っている車両を再配置するワークフローがあるために予約できた

昨日のメタ認知が暴走するではないけど、メタ認知を働かせるといろんなケースが出てくる。明日お店に行ってちゃんと配車されることを期待する。

豆苗再生

3時に寝て8時半に起きた。夜眠れなくて、野菜サラダに目玉焼きをのせて食べたり、お茶をわかしてボトルに入れ替えたりしてた。休日だと時間に余裕があるせいか、空き時間に自炊してなにか作ることが多い。

豆苗の再生栽培

朝ご飯は野菜サラダと納豆を、お昼ご飯は豚肉としめじと2回目の豆苗を炒めたものを目玉焼きでとじたものを食べた。豆苗のパッケージに食べた後の根を水に浸しておけばまた生えてくるとあったので試しにやってみた。キッチンという日当たりのよくない場所で育てたせいか、薄い緑色の苗が生えてきた。

水に浸して2日目

水に浸して2日目

水に浸して6日目

水に浸して6日目

今回は適当に育てた。再生栽培のコツ を読んで次はもうちょっとちゃんと育ててみよう。

データ指向アプリケーションデザイン

6章パーティショニングを読んだ。昔からパーティショニングとシャーディングの違いはなんだろう?と漠然と思っていた。パーティションの設計 を読むと、3つのパーティション分割があげられている。

  • 水平的パーティション分割 (シャーディング)
  • 列方向のパーティション分割
  • 機能的パーティション分割

パーティショニングは大規模なデータセットをデータ分割するための手法または概念として広い意味をもって使われるように読める。一方でシャーディングと呼ばれるものは水平パーティショニングのことを指している。いま分散データベースで一般的に使われている仕組みがそうなのかもしれない。本書では水平・垂直のパーティショニングの定義は行われていないが、次の説明が出てくる。おそらく主に水平パーティショニングを意図しているのではないかと思う。まとめはこんな感じ。

用語の混乱

ここで パーティション と呼んでいるものは、 MongoDB 、 Elasticsearch 、 SolrCloud では シャード と呼ばれています。これは HBase では リージョン 、 Bigtable では タブレット 、Cassandra や Riak では vnode 、 Couchbase では vBucket と呼ばれています。とはいえ最も確立されている用語は パーティショニング なので、本書ではこの呼び方を使っていきます。

パーティショニングも普通に開発をしていたらデータベースの設計で必要になるので身近な概念と言える。だいたいは知っている内容ではあったけど、パーティショニングとセカンダリインデックスの仕組みとか考えたことがなかった。Cassandra ではセカンダリインデックスをうまく設計しないとパフォーマンスに影響を与えることからあまり使われない傾向にあると思う。

大規模なデータセットを小さな部分集合にデータ分割することをパーティショニングと呼ぶ。パーティショニングが必要になるのは、単一のマシンで保存や処理をするのが現実的ではないほどのデータがある場合になる。パーティショニングが目標とするのは、データやクエリの負荷を複数のマシン間で均等に分配し、ホットスポット(不均衡に高い負荷がかかるノード)が生じないようにすること。パーティショニングが均等になっておらず、一部のパーティションが他に比べて多くのデータやクエリを受け持っているような状態は スキュー(skew) と呼ばれる。そのためには、データに適したパーティショニングのスキームを選択し、クラスタへのノードの追加やクラスタからのノードの削除が生じたときにパーティション群をリバランシングする。

パーティショニングのアプローチとして主に2つがある。

  • キーの範囲によるパーティショニング
    • キーはソートされ、1つのパーティションには何らかの最小値と最大値の間にあるすべてのキーが保存される
    • キーをソートすることで、範囲に対するクエリが効率的に処理できるというメリットがある
    • アプリケーションが頻繁にアクセスするキーがソート順の中で近接していると、ホットスポットが生じるリスクがある
    • 通常このアプローチでは、パーティションのリバランシングはパーティションが大きくなりすぎたときにその範囲を2つに分割することによって動的に行われる
  • ハッシュパーティショニング
    • ハッシュ関数がそれぞれのキーに対して適用され、1つのパーティションにはハッシュの一定の範囲を保存される
    • この方法ではキーの順序が失われるので範囲に対するクエリは非効率になるが、負荷分散より均等にしやすい
    • ハッシュによってパーティショニングを行う場合は、事前に固定数のパーティションを作成し、各ノードに複数のパーティションを割り当てておき、ノードの追加や削除が行われた場合にはパーティションをそのままあるノードから他のノードに移動させるのが一般的となる。また、動的パーティショニングも利用できる

ハイブリッドなアプローチを取ることもできる。たとえば複合キーを使い、キーの一部でパーティションを決め、他の部分でソート順を決めるといったやり方がある。Cassandra のプライマリーキーはこのアプローチを採用している。また、セカンダリインデックスもパーティショニングする方法が2つある。

  • ドキュメントによってパーティショニングされたインデックス(ローカルインデックス)
    • セカンダリインデックスをプライマリキー及び値と同じパーティションに保存する
    • 書き込みの際に更新しなければならないパーティションが1つですむ
    • セカンダリインデックスの読み取りにはすべてのパーティションに対する スキャッタ/ギャザー が必要となる
  • 語によってパーティショニングされたインデックス(グローバルインデックス)
    • セカンダリインデックスはインデックスが張られた値を使って独立にパーティショニングされる
    • セカンダリインデックスのエントリには、プライマリキーのあらゆるパーティションのレコード群が含まれる
    • ドキュメントが書き込まれる際には、セカンダリインデックスの複数のパーティションを更新しなければならない
    • 読み取りは単一のパーティションだけで処理できる

クエリを適切なパーティションにルーティングする手法は、データベースに限った話題ではなく、サービスディスカバリ と呼ばれる一般的な問題である。有名な OSS として ZooKeeper がある。これにはシンプルなパーティションを認識するロードバランシングから、洗練された並列クエリ実行エンジンまで様々である。すべてのパーティションは、ほぼ独立に動作できるように設計されている。パーティショニングされたデータベースが複数のマシンにまでスケールできるのはそのおかげである。