小编Pet*_*son的帖子

代表couchDB中的多对多关系

假设我正在编写一个日志分析应用程序.主域对象是LogEntry.此外.应用程序的用户定义了一个LogTopic,它描述了他们感兴趣的日志条目.当应用程序接收日志条目时,它会将它们添加到couchDB,并根据系统中的所有LogTopics检查它们,看它们是否与主题中的条件匹配.如果是,则系统应记录该条目与主题匹配.因此,LogEntries和LogTopics之间存在多对多关系.

如果我将它存储在RDBMS中,我会做类似的事情:

CREATE TABLE Entry (
 id int,
 ...
)

CREATE TABLE Topic (
 id int,
 ...
)

CREATE TABLE TopicEntryMap (
 entry_id int,
 topic_id int
)
Run Code Online (Sandbox Code Playgroud)

使用CouchDB我首先尝试只有两种文档类型.我有一个LogEntry类型,看起来像这样:

{
  'type': 'LogEntry',
  'severity': 'DEBUG',
  ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个LogTopic类型,看起来像这样:

{
  'type': 'LogTopic',
  'matching_entries': ['log_entry_1','log_entry_12','log_entry_34',....],
  ...
}
Run Code Online (Sandbox Code Playgroud)

您可以通过使用matching_entries每个LogTopic文档中的字段来存储LogEntry文档ID列表来查看我表示关系.这在某种程度上可以正常工作,但是当多个客户端都试图向主题添加匹配条目时,我遇到了问题.两者都尝试乐观更新,一个失败.我现在使用的解决方案是基本上重现RDBMS方法,并添加第三种文档类型,如:

{
  'type':'LogTopicToLogEntryMap',
  'topic_id':'topic_12',
  'entry_id':'entry_15'
}
Run Code Online (Sandbox Code Playgroud)

这工作,并通过并发更新问题,但我有两个保留:

  1. 我担心我只是使用这种方法,因为它是我在关系数据库中所做的.我想知道是否有更像couchDB(放松?)的解决方案.
  2. 我的视图无法再在一次调用中检索特定主题的所有条目.我之前的解决方案允许(如果我使用了include_docs参数).

任何人都有更好的解决方案吗?如果我也发布了我正在使用的观点会有帮助吗?

couchdb non-relational-database nosql

3
推荐指数
1
解决办法
2658
查看次数

使用EventMachine进行SOAP调用

有没有办法在EventMachine中创建非阻塞SOAP请求?

我正在创建一个ruby应用程序,它使用adwords4r gem与google adwords api(基于SOAP)进行交互.应用程序使用EM通过stomp连接接收消息,然后通过对adwords api进行SOAP调用来处理这些消息.显然,我需要这些调用是非阻塞的,因为处理将在reactor线程内.一种选择是使用EM.defer,但我宁愿没有线程池中的一堆线程的开销.

ruby soap asynchronous nonblocking eventmachine

3
推荐指数
1
解决办法
945
查看次数

Ruby已经在使用我的模型的类名

我正在制作一个具有各种授权级别的论坛应用程序,其中一个是Monitor.我是通过扩展我的User类来做到这一点的,我计划用"-ship"类(例如管理员,作者,主持人等)对此进行微调.显然,Monitor类是ruby mixin的一部分.如何在没有冲突的情况下保留我的资源名称?

ruby conflict namespaces ruby-on-rails class

2
推荐指数
1
解决办法
2162
查看次数

使用bash将单行输入传递给命令的stdin的最佳实践

我有一个命令行程序,它从stdin获取输入.使用bash将stdin行传递给该程序的最佳方法是什么?我有两种方法可以完成这项工作,但它们看起来都很笨拙.

我将用一个计算三个单词的愚蠢的例子来说明我的方法.

使用这里的文档:

wc -w <<EOS
one two three
EOS
Run Code Online (Sandbox Code Playgroud)

使用echo:

echo 'one two three' | wc -w
Run Code Online (Sandbox Code Playgroud)

正如我所说,这两个看起来有点笨重.有没有更清洁的方法来实现这一目标?

bash shell command-line

2
推荐指数
1
解决办法
161
查看次数