[erlang-questions] ETS ordering
lud
ludovic@REDACTED
Fri Feb 28 17:55:59 CET 2014
Hi,
I need some help setting up ETS tables for an application :
I would like to store users' sell-orders and buy-orders in an ETS Table.
I would like them to be ordered.
(tl;dr please see last paragraph.)
Tuples must contain the following values :
- Whose order it is
- 'buy' or 'sell'
- The quantity
- The product id
- The price
So, as an example :
{jack,buy,6,apple,36.00}
{william,buy,20,apple,23.00}
{joe,buy,8,apple,35.00}
{averell,buy,1,apple,100.00}
(prices are per unit)
If some user wants to sell 20 apples a minimum price of 20.00, the three
orders match, but I would like to iterate from highest price to lower.
I want the user to get the maximum profit, so the records must come in
this ordering :
{jack,buy,6,apple,36.00}
{joe,buy,8,apple,35.00}
{william,buy,20,apple,23.00}
I will sell 20 apples : 6 to jack, 8 to joe and 6 to william.
When I want to buy, I would like the sell orders to come in the opposite
ordering : cheapest first !
So i've thought of having two tables, buy-orders on one side,
sell-orders on the other. I could use ordered_set table type and
ets:select/3 to fold over the matchspec results in order. For buy
orders, I can store negative prices so higher prices come first.
My main question is on the key : do you think it's okay/good to have
tuples with compound keys such as the following in buy_orders table ?
{{ItemTypeID,Price,OrderID},Quantity,BuyerID}
{{apple, -36.00, 1}, 6, jack}
{{apple, -35.00, 2}, 8, joe}
{{apple, -23.00, 3}, 20, william}
I must have OrderID (which is a dummy value) because there is no
ordered_bag table type and users may sell/buy same items at the same
price, and one user could sell/buy the same item at two different prices
(e.g. testing the market).
Thank you
More information about the erlang-questions
mailing list