2. NoSQL
NoSQL - po co?
ACID nie zawsze jest potrzebny
RDBMS nie radzą sobie z dużym wolumenem danych (TB,
PB)
elastyczność
3. NoSQL
NoSQL - po co?
ACID nie zawsze jest potrzebny
RDBMS nie radzą sobie z dużym wolumenem danych (TB,
PB)
elastyczność
NoSQL - wady
Godne zaufania?
7. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
8. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
UTF-8
9. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
UTF-8
protokół binarny
10. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
UTF-8
protokół binarny
sterowniki do wielu języków
11. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
UTF-8
protokół binarny
sterowniki do wielu języków
GridFS
12. MongoDB - właściwości
napisane w C++
dokumenty składuje jako BSON
zaprojektowane by pracować w chmurze
UTF-8
protokół binarny
sterowniki do wielu języków
GridFS
map-reduce, JavaScript
19. test/test helper.rb
class ActiveSupport::TestCase
# Drop all columns after each test case.
def teardown
MongoMapper.database.collections.each do |coll|
coll.remove
end
end
# Make sure that each test case has a teardown
# method to clear the db after each test.
def inherited(base)
base.define_method teardown do
super
end
end
end
23. app/uploaders/asset uploader.rb
class AssetUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :grid_fs
def store_dir
"assets/#{model.id}"
end
version :thumb { process :resize_to_fill => [200, 200] }
version :comparable { process :resize_to_fill => [450,450] }
def extension_white_list
%w(jpg jpeg png)
end
end
24. app/models/asset.rb
# Asset connected with model. It could be photo image etc.
class Asset
include MongoMapper::Document
include MongoMapper::FindRandom
# Uploader for image
mount_uploader :image, AssetUploader
# Fields definition
key :model_id, ObjectId, :required => true
# Callbacks
after_destroy :remove_image_from_db
# Associations
belongs_to :model
end
26. app/metals/grid file.rb
class GridFile
def self.call(env)
if env["PATH_INFO"] =~ /^/images/assets/(.+)$/
key = "assets/" + $1
if ::GridFS::GridStore.exist?(MongoMapper.database, key)
::GridFS::GridStore.open(MongoMapper.database, key, ’r’) do |file|
[200, {’Content-Type’ => file.content_type}, [file.read]]
end
else
[404, {’Content-Type’ => ’text/plain’}, [’File not found.’]]
end
else
[404, {’Content-Type’ => ’text/plain’}, [’File not found.’]]
end
end
end