在我的Ubuntu服务器上,我有一个Ruby On Rails应用程序,它依赖于MongoDB。我经常使用Mongoid将对象注入DB,但当注入大量对象时,我会编译一个巨大的哈希数组,并使用mongoShell方法DB.collection.insert():注入
ObjectName.collection.insert([{_id: BSON::ObjectId('5671329e4368725951010000'), name: "foo"}, {_id: BSON::ObjectId('567132c94368725951020000'), name: "bar"}])
批量插入时间对我来说是一个瓶颈。例如,批量插入150000个对象需要23秒。是否可以以加快批量插入的方式分配资源?
您可以尝试使用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驱动程序
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查询同样的方式。您可以按照批量插入
对于增加数据,您可以使用分片和
Sharding是跨多个存储数据记录的过程机器,是MongoDB满足数据需求的方法发育随着数据大小的增加,单个机器可能不会足以存储数据,也不足以提供可接受的读写吞吐量Sharding解决了水平缩放的问题。具有分片,您可以添加更多的机器来支持数据增长和需求读取和写入操作。
不同比例
垂直扩展增加了更多的CPU和存储资源容量通过增加容量进行扩展有局限性:高性能具有大量CPU和大量RAM的系统比小型系统昂贵得不成比例。此外,基于云的提供商可能只允许用户提供较小的实例。因此,对于垂直缩放。相比之下,碎片化或水平缩放,划分数据集并将数据分布在多个服务器上,或碎片。每个shard都是一个独立的数据库,碎片组成一个单独的逻辑数据库。