【发布时间】:2011-10-11 15:45:17
【问题描述】:
在将以下 CouchDB 视图从 javascript 转换为 erlang 时,我需要一些帮助。我在 erlang 中需要它们,因为在 javascript 中,视图使用了所有可用的堆栈内存并导致 couchjs 崩溃(请参阅此错误报告 https://issues.apache.org/jira/browse/COUCHDB-893)。
我在javascript中的当前地图功能是:
sync/transaction_keys
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions)
emit(key, null);
}
}
和同步/交易
function(doc) {
if(doc.doc_type == "Device") {
for(key in doc.transactions) {
t = doc.transactions[key];
t.device = doc.device;
emit(key, t);
}
}
}
一个示例文档是:
{
"_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"
}
}
}
基本上,sync/transaction_keys 会发出事务字典的所有键,而 sync/transaction 会发出事务字典中的所有条目。
很遗憾,我以前从未使用过 Erlang,我需要尽快重写该代码,因此非常欢迎任何帮助。
提前致谢。
【问题讨论】:
-
您的较大文档中有多少笔交易?这应该没问题,虽然我会避免使用全局变量(我认为在这种情况下真的并不重要)。
-
大约 594 笔交易/文件。但它一直在增长,因为每 15 分钟就会添加另一笔交易。
-
也许您最好将这些交易表示为新文档。有什么理由不这样做吗?似乎以这种方式建模会更容易。
-
是的,这就是我之前所做的,但我被告知将其更改为 1 个文档/设备。
标签: javascript erlang couchdb