把 SQL Server 导入 MongoDB 的 Ruby 脚本

最近想要测试一下 MongoDB 2.4 新增的 Text Search 功能,需要把以前 SQL Server 数据库中的内容导出到 MongoDB 中做测试用。虽然用 Node.js 也可以操作 SQL Server 数据库,但是微软提供的msnodesql 驱动目前(版本0.2.1)只支持 Windows,想想还是改一下以前写的 Ruby 脚本会更快些。假设你已经成功地安装了 Ruby, Rails 以及 SQL Server 和 MongoDB;剩下的主要就是安装 Ruby 需要的 SQL Server 和 MongoDB 驱动了。

# 首先安装 Rails 连接 SQL Server 所需要的驱动
gem update --system
gem install activerecord-sqlserver-adapter
 
#再安装 10gen 提供的 MongoDB 驱动:
gem install mongo
 
# 这一步会自动安装 bson,再安装 bson_ext
gem install bson_ext


实际脚本的代码就比较简单了:

require "rubygems"
require "active_record"
require "mongo"
 
include Mongo
 
# 声明一个 MongoDB client
@client = MongoClient.new('localhost', 27017)
# MongoDB db
@db = @client['your_mongo_dbname']
# MongoDB collection
@coll = @db['your_collection_name']
 
@coll.remove
 
# 连接 SQL Server 数据库的设置
ActiveRecord::Base.establish_connection(
  :adapter => "sqlserver",
  :host => "your_database_ipaddress",
  :database => "your_database_name",
  :username => "your_database_username",
  :password => "your_database_password"
)  
 
class FooBar < ActiveRecord::Base
  # 指定我们实际的表的名字
  self.table_name = "your_table_name"
end
 
# 使用 find_each 遍历我们的大数据量表
FooBar.find_each(:batch_size => 1000) do |foo|
	# 插入到 MongoDB 的 collection 中
  @coll.insert({'col1' => "#{foo.bar1}", "col2" => "#{foo.bar2}", "col3" => "#{foo.bar3}"});
end


参考:

  • http://docs.mongodb.org/ecosystem/drivers/ruby/
  • Ruby Driver Tutorial: http://api.mongodb.org/ruby/current/

鉴于 Ruby 的元编程特性和 MongoDB 的灵活性,是不是可以做一个通用的转换程序?有时间可以试着写一个。

本文地址:http://www.tfan.org/from-sqlserver-to-mongodb-using-ruby-and-rails

你可能感兴趣的:(把 SQL Server 导入 MongoDB 的 Ruby 脚本)