如何快速上手 Dynamoid:从 AWS 配置到第一个 DynamoDB 模型的完整教程
【免费下载链接】dynamoidRuby ORM for Amazon's DynamoDB.项目地址: https://gitcode.com/gh_mirrors/dy/dynamoid
Dynamoid 是 Ruby 生态中面向 Amazon DynamoDB 的 ORM 框架,语法高度模仿 ActiveRecord。本教程带你快速完成 AWS 凭证配置、命名空间设置,并写出第一个可增删改查的 DynamoDB 模型,让你十几分钟就能跑通完整流程 🚀
为什么选择 Dynamoid:DynamoDB 的 Ruby ORM
如果你熟悉 ActiveRecord,Dynamoid 几乎零学习成本。它提供了:
- ✅ 与 ActiveRecord 一致的
create / find / where / update / destroy语法 - ✅
has_many、belongs_to、has_one、has_and_belongs_to_many原生关联支持 - ✅ ActiveModel 验证与回调
- ✅ 全局二级索引(GSI)、事务、乐观锁、STI 单表继承
- ✅ 自动建表、Rake 任务、本地 DynamoDB 测试支持
一句话定位:它让 DynamoDB 像操作 MySQL 一样简单。
一键安装:Dynamoid 快速开始步骤
在你的Gemfile中加入一行依赖:
gem 'dynamoid'然后执行bundle install即可。
⚠️版本兼容对照:Dynamoid 3.x 搭配 AWS SDK 3.x(当前主线版本),Dynamoid 0.x 对应 AWS SDK 1.x,请勿混用。
依赖声明可见 dynamoid.gemspec。支持 Ruby 2.3+ 与 Rails 4.2 ~ 8.1。
AWS 配置:连接 DynamoDB 的 3 种方式
方式一:Rails 初始化器配置全局凭证
创建config/initializers/aws.rb:
Aws.config.update( region: 'us-west-2', credentials: Aws::Credentials.new('ACCESS_KEY_ID', 'SECRET_ACCESS_KEY') )方式二:仅在 Dynamoid 内部指定凭证
require 'dynamoid' Dynamoid.configure do |config| config.access_key = 'ACCESS_KEY_ID' config.secret_key = 'SECRET_ACCESS_KEY' config.region = 'us-west-2' end方式三:传入预配置凭证对象
适合使用 IAM Role 等场景,直接config.credentials = credentials即可。
所有配置项的默认值定义在 lib/dynamoid/config.rb,常用配置还有:
| 配置项 | 作用 | 默认值 |
|---|---|---|
namespace | 表名前缀,隔离不同环境 | dynamoid |
endpoint | 指向 DynamoDB Local 的地址 | nil |
read_capacity/write_capacity | 建表时的读写容量 | 100 / 20 |
timestamps | 是否自动生成created_at/updated_at | true |
开发时建议加一行config.endpoint = 'http://localhost:8000',直连本地 DynamoDB,省钱又安全 💡
5 分钟定义你的第一个 DynamoDB 模型
Dynamoid 模型只需两步:包含Dynamoid::Document模块 + 声明字段。以用户模型为例:
class User include Dynamoid::Document field :name field :email field :admin, :boolean field :last_logged_in_at, :datetime validates_presence_of :name endid、created_at、updated_at三个魔法列自动提供,无需声明- 字段默认
string类型,还支持integer、number、set、array、map、datetime、boolean、serialized等 - 忘了声明的字段会被直接忽略,不会出现在模型上,这是新手最常踩的坑
完整示例可参考项目自带的 spec/app/models/user.rb。
自定义表名与主键
默认表名为表名前缀_users,主键为id。如需自定义:
table name: :awesome_users, key: :user_id, read_capacity: 5, write_capacity: 5注意:这些选项只对新建表生效,不会修改已存在的表。
声明排序键(Range Key)
class Post include Dynamoid::Document range :posted_at, :datetime end建表与连通性检查:Rake 任务一步到位
Dynamoid 内置两个 Rake 任务(实现见 lib/dynamoid/tasks/database.rake):
rake dynamoid:ping # 测试能否连通 DynamoDB rake dynamoid:create_tables # 为所有模型批量建表create_tables只创建缺失的表、不改动已有表。另外,若配置了create_table_on_save: true(默认开启),第一次save时也会自动建表——对新手非常友好。
CRUD 与查询:像用 ActiveRecord 一样操作 DynamoDB
# 创建 u = User.new(name: 'Josh') u.email = 'josh@example.com' u.save u.id # => '3a9f7216-4726-4aea-9fbc-8554ae9292cb'(UUID 字符串) # 查询 User.find(u.id) User.where(admin: true).all User.find_by_email('josh@example.com') # 更新 User.find(u.id).update_attributes(name: 'Joshua') # 批量删除(高效分批执行) User.where(admin: false).delete_all查询还支持丰富操作符:
User.where('age.gt': 18) # 范围条件 User.where('name.begins_with': 'Jo') # 前缀匹配 User.where('age.between': [18, 30]) # 区间 User.record_limit(5).batch(100).each { |u| } # 限量 + 分批,适合大表💡性能提示:键属性条件请写成 Hash 形式(走 Query),字符串表达式只在过滤阶段生效(走 Scan)。大表扫描有成本,能用 Query 就不用 Scan。
关联与进阶特性速览
class User include Dynamoid::Document has_many :addresses belongs_to :group, foreign_key: :group_id end class Address include Dynamoid::Document belongs_to :user # 自动与 User 关联 end进阶能力按需了解:
- 全局二级索引:
global_secondary_index hash_key: :age, projected_attributes: :all - 事务:
User.transaction { |t| t.create(User, ...); t.update_fields(...) },全部成功或全部回滚 - 乐观锁:加一个
field :lock_version, :integer即可 - 回调:
before_save、after_create、after_destroy等与 Rails 一致
常见新手问题清单 📋
| 问题 | 原因与解法 |
|---|---|
| 字段存不进去 | 忘记在模型中field声明,未声明字段会被丢弃 |
| 连接失败 | 检查region与凭证;本地开发配置endpoint |
| 读写不一致 | DynamoDB 默认最终一致性,需要强一致读用consistent_read: true(成本翻倍) |
| 测试互相污染 | 测试环境按 namespace 隔离,可在before(:each)中删表重建 |
调试时可开启日志:Dynamoid.config.logger.level = :debug,会输出每次请求的完整报文与耗时。
总结:从配置到模型的完整路线
Gemfile添加gem 'dynamoid'并安装- 配置 AWS 凭证与 region,按需设置
namespace和endpoint - 编写模型:
include Dynamoid::Document+ 声明field rake dynamoid:ping验证连通,rake dynamoid:create_tables建表- 用 ActiveRecord 风格代码完成 CRUD 与查询
按这条路线走下来,你的 Ruby 应用已经可以流畅地操作 DynamoDB 了。更多配置项与 API 细节,参考 README.md 与 CHANGELOG.md。
【免费下载链接】dynamoidRuby ORM for Amazon's DynamoDB.项目地址: https://gitcode.com/gh_mirrors/dy/dynamoid
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考