I''ve been playing around with a soap interface to an application that
can return large datasets (up to 50mb or so). There are also some
nested structures for which I''ve used ActionWebService::Struct with
2-3 nested members of oher ActionWebService::Struct members. In
addition to chewing up a ton of memory, cpu ulilization isn''t that
great either. My development server is a dell 2600 Xeon 1.8mghz.
It seems like creating all of the nested structures might be what''s
eating all the cpu. Cpu utilitzation goes up to almost 70%.
A simpler application where I just use plain xml in the request and
response, and use a bit of to_xml and REXML for building the trees
still takes a good amount of memory but nowhere near the amount of
cpu.
The data is from 3 tables. Customers, transactions, and orderitems.
I created a struct for customers and in customers there are two
members that contain a struct for transactions and orderitems.
Right now the code looks like this. Any ideas on how to optimize it?
Or even ideas on better methods then using soap for something like
this?
@orders = Customer.find(:all, :include => [:orderitems, :histories],
:conditions => ["history.trans_date between ? and
?",start_date,end_d
ate], :limit => 500)
for order in @orders
oi = []
for items in order.orderitems
oi << OrderitemData.new(:sku => items.sku, :item_type =>
items.item_type, :descript => items.descript, :amount => items.amount,
:quan
t => items.quant, :trans_id => items.trans_id, :trans_date =>
items.trans_date)
end
trans = []
for history in order.histories
trans << TransactionData.new(:sale_type => history.sale_type,
:order_id => order.order_id, :trans_id => history.trans_id, :outcome
=>
history.outcome)
end
ar << CustomerData.new(:orderitem_data => oi, :transaction_data
=> trans, :address => order.address, :address2 => order.address2,
:f_na
me1 => order.f_name1, :l_name1 => order.l_name1)
end
ar
end