Potrzebuję pomocy w tłumaczeniu następujących widoków CouchDB z javascript na erlang. Potrzebuję ich w erlangu, ponieważ w javascriptie widok wykorzystuje całą dostępną pamięć stosu i zawiesza couchjs (zobacz ten raport błędu https://issues.apache.org/jira/browse/COUCHDB-893).Przekłada widoki javascript CouchDB na erlang
Bieżące funkcje map mam w JavaScript są:
sync/transaction_keys
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions)
emit(key, null);
}
}
i sync/transcation
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions) {
t = doc.transactions[key];
t.device = doc.device;
emit(key, t);
}
}
}
Przykładowy dokument będzie:
{
"_id": "fcef7b5c-cbe6-31af-8363-2b446a7e4cf2",
"_rev": "3-c90abd075404a75744fd3e5e4f04ebad",
"device": "fcef7b5c-cbe6-31af-8363-2b446a7e4cf2",
"doc_type": "Device",
"transactions": {
"79fe8630-c0c0-30c6-9913-79b2f93e3e6e": {
"timestamp": 1309489169533,
"version": 10008,
"some_more_data" : "more_data"
}
"e4678930-c465-76a6-8821-75a3e888765a": {
"timestamp": 1309489169533,
"version": 10008,
"some_more_data" : "more_data"
}
}
}
Zasadniczo sync/transaction_keys emituje wszystkie klucze słownika transakcji, a synchronizacja/transakcja powoduje emisję wszystkich wpisów w słowniku transakcji.
Niestety, nigdy wcześniej nie używałem Erlanga i muszę przepisać ten kod wkrótce, więc każda pomoc jest bardzo mile widziana.
Z góry dziękuję.
Ile transakcji posiadasz w większych dokumentach? To * powinno * być w porządku, chociaż uniknęłoby to zmiennych globalnych (nie sądzę, że * tak naprawdę * ma znaczenie w tym przypadku). – Dustin
około 594 transakcji/dokumentu. Ale ciągle rośnie, ponieważ co 15 minut zostanie dodana kolejna transakcja. – Simon
Być może lepiej byłoby reprezentować te transakcje jako nowe dokumenty. Czy jest jakiś powód, aby tego nie robić? Wygląda na to, że łatwiej będzie to modelować w ten sposób. – Dustin