PCがあれば何でもできる!スマートフォン用の表示で見るPCがあれば何でもできる!へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けしますこの広告は、90日以上更新していないブログに表示しています。RubyDynamoDBについて皆さんは、AWSのNoSQLデータベース「DynamoDB」を利用していますか?DynamoDBは、テーブル毎にスループット容量を設定できることと、主にその設定値によって利用料が決まることが特徴です。データ容量による課金ではないため、大量データの管理が高額にならず、利用が集中するテーブルや時間に合わせて、スループット容量と利用料のバランスを調整することができます。あ、もちろんAmazonなので、速度は折り紙つきです。弊社はデータ管理に複数のDBを利用していますが、上記の特徴から、件数が大量のデータやアクセスが集中しやすいデータの場合は、DynamoDBを利用しています。Railsでデータ操作のコードを書くとなると、公式のORMが今ひとつ使いにくいことに気が付きます。aws-sdkの「AWS::Record::HashModel」というクラスなのですが、使いにくい例を挙げると...ActiveRecordの文法に似せてあるものの書き方が古かったりわざわざテーブルのスキーマ情報を取得する必要があったりetc...Dynamoidを使うそこで、「Dynamoid」というgemを利用してみます。GitHubaws-sdkをラップし、よりActiveRecordに近い形で操作可能になっており、おすすめです。Dynamoidはテーブル名に制約がかかってしまう前段が長くなってしまいましたが、ここからが本題です。このDynamoidは、どうやら初期のテーブル作成から使用されることを想定しているようで、テーブル名の命名規則にいくつか制限がかかってしまいます。endendUserModelのアクセス先のテーブル名は「test_users」となってしまうのです。これは、命名規則にマッチしないテーブルが既に存在する場合に、かなりの痛手です。DynamoDBはテーブル名の変更はできませんので、本気でやるなら新規テーブル作成後、データ移行するという手順を踏むことになります。悲しい...orzテーブル名の制約の対処方法この問題に対処するため、Rubyのオープンクラスの特性を活かして、Dynamoidのコードを外部から書き換えます。endendコメントアウトの文と見比べていただければ、処理内容は単純なのでお分かりかと思います。このコードをModel使用前に読み込ませることで、テーブル名の制約を取っ払うことができます。将範フリーランス/エンジニア(主にサーバサイド、その他広く浅く)自宅の作業場は冷蔵庫の隣。キッチンエンジニアとして日々精進しています。(1)はてなブログをはじめよう!m_doi2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。