検証用にfluent-plugin-dynamodb-altというのを作りました。
検証用なので、RubyGems.orgには未登録。積極的にメンテナンスする気はないです。
→諸事情により割と積極的にメンテしてます
fluent-plugin-dynamodbの微妙な点
- PKがかぶる
- BatchWriteItemでExpectedが使えない
fluent-plugin-dynamodb-altの特徴
Expectedの使い方
以下のように設定すると、
expected id NULL,time LT ${time} conditional_operator OR
次のようなExpectedになります。
{ :expected=>{ "id"=>{:comparison_operator=>"NULL"}, "time"=>{:comparison_operator=>"LT", :attribute_value_list=>["2014-08-17T16:57:45Z"]} }, :conditional_operator=>"OR" }
${time}
のattribute_value_listは{}内のキーでレコードから取得します。
misc
- aws-sdk 1.0系だとExpectedでcomparison_operatorが使えないようにみえます(ソースは追ってないです)
- aws-sdk 2.0系でput_itemのリクエストの記述が間違ってます。
item: {"key" => {s: "value"}}
ではなくitem: {"key" => "value"}
と書く必要があります - BatchWriteItemでExpectedを使えないのは厳しいですねぇ
もやもや
DynamoDBはなんだかんだで結構高いですよね。特にWriteが。 10,000w/sで$6,000/月ぐらいになるので普通のKVS感覚で使うと破産しそう。
BatchWriteItemつかってもお値段は下がりそうにないので、非同期でキーを集約して極力Writeを減らす・オートスケールをがんばる・低いスループットでリトライしまくる、みたいな小細工が必要そうですがみなさんどうしているんだろう…
宣伝
ddbcli、便利ですよ〜