34.
#
config.include
RSpec::Octopus
config.before
do
shards
=
ActiveRecord::Base.connection_proxy.instance_variable_get(:@shard
@connections
=
shards.values.map(&:connection)
@connections.each
do
|connection|
connection.increment_open_transactions
connection.transaction_joinable
=
false
connection.begin_db_transaction
end
end
config.after
do
@connections.each
do
|connection|
if
connection.open_transactions
!=
0
connection.rollback_db_transaction
connection.decrement_open_transactions
end
end
end
13年1月14日月曜日
38. ・IDがわかれば、それに紐付
くデータが一意に決まる
・重複が起きない
ex)) user_id ++ コンテンツ
((feed
or
image
or
...))のID
13年1月14日月曜日
39. class
Sequence
<
SequenceShard
self.table_name
=
'seq'
def
self.generate(model)
result
=
self.connection.execute(
"UPDATE
seq
SET
id=LAST_INSERT_ID(id+1)"
)
id
=
self.connection.last_inserted_id(result)
or
raise
RuntimeError
return
id
end
end
13年1月14日月曜日
50. Model
Data
・DBへのアクセスを管理する層
・connectionの設定、SQLを管
理のみ
13年1月14日月曜日
51. class
TestMasterShard
<
ActiveRecord::Base
self.abstract_class
=
true
establish_connection
"#{ENV['RAILS_ENV']}_test_master"
end
1
class
FooMaster
<
TestMasterShard
self.table_name
=
'foo'
attr_accessible
:name
validates
:content_id,
{presence:
true}
default_scope
where(is_deleted:
0)
scope
:hoge,
lambda
{
|foo|
where('bar
=
?',
bar)
}
end
13年1月14日月曜日
52. Model
Logic
・Model Dataを用いて、
master/slaveの処理をまと
める層
13年1月14日月曜日
53. class
BaseLogic
include
ActiveModel::MassAssignmentSecurity
include
ActiveRecord::AttributeAssignment
include
ActiveModel::Conversion
include
ActiveModel::Validations
extend
ActiveModel::Naming
extend
ActiveModel::Translation
def
persisted?;
false;
end
end
class
TestLogic
<
BaseLogic
attr_accessor
:foo
attr_accessible
:foo
def
get_test_one
TestSlave.get_one
end
end
13年1月14日月曜日
100. public
subnet
net work
Gateway NAT
SSLの変換
subnet subnet subnet
subnet fluentd
utility storage
ser vice
deliver proxy
APP
Watch
redis
f f f
worker varnish
DB +
sinatra
f f worker
f f
13年1月14日月曜日