在我的Ubuntu服务器上,我有一个依赖于MongoDB的Ruby on Rails应用程序。我经常使用Mongoid将对象注入到数据库中,但是当注入大量对象时,我编译了大量哈希并使用mongo Shell方法db.collection.insert()注入它:
ObjectName.collection.insert([{_id: BSON::ObjectId('5671329e4368725951010000'), name: "foo"}, {_id: BSON::ObjectId('567132c94368725951020000'), name: "bar"}])
批量插入时间对我来说是一个瓶颈。例如,批量插入150000个对象需要23秒。是否可以以更快地插入批量的方式分配资源?
答案 0 :(得分:0)
您可以尝试使用mongoid gem
batch = [{_id: BSON::ObjectId('5671329e4368725951010000'), name: "foo"}, {_id: BSON::ObjectId('567132c94368725951020000'), name: "bar"}]
Post.collection.insert(batch) #lest Post is the model
或者您可以通过Ruby MongoDb Driver
来完成require 'mongo'
mongo_client = Mongo::MongoClient.new
coll = mongo_client['test_db']['test_collection']
bulk = coll.initialize_ordered_bulk_op
batch.each do |hash|
bulk.insert(hash)
end
bulk.execute
如果你想以同样的方式通过mongo查询。您可以关注Bulk Insert
要增加数据,您可以使用sharding和
Sharding是跨多个存储数据记录的过程 机器,是MongoDB满足数据需求的方法 生长。随着数据大小的增加,单个机器可能不会 足以存储数据,也不提供可接受的读写 吞吐量。分片解决了水平缩放的问题。同 分片,您添加更多的机器来支持数据增长和需求 读写操作。
不同的缩放
垂直扩展会增加更多的CPU和存储资源 容量。通过增加容量进行扩展具有局限性:高性能 具有大量CPU和大量RAM的系统 比小型系统更昂贵。另外, 基于云的提供商可能只允许用户配置较小的 实例。因此,具有实用的最大能力 垂直缩放。相比之下,分片或水平缩放 划分数据集并在多个服务器上分发数据, 或碎片。每个分片都是一个独立的数据库,统称为 分片组成一个逻辑数据库。