我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.
我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.
工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.
在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.
现在这里是棘手的部分:
我对一般数据库设计和使用哪些技术有一些疑问.
最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.
我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.
就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?
PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.
感谢您的输入!
@timdev:
谢谢.
我认为UTC时间字符串2011-01-26 21:41:09 +0000可能没问题,因为它们在视图键中使用时排序正确,但存储时区(例如2011-01-26 16:41:09 -0500)会使文档更具可读性.从可读性的角度来看,将日期转换为纪元整数似乎是最不吸引人的,但也许最适合性能(或者它会有所作为?).这里的推荐做法是什么?
我听说过很多像CouchDB这样的面向文档的数据存储.我理解BigTable的用途,比如Cassandra等商店.在阅读完这个问题之后,我想知道使用文档存储的条件是什么?
我正在研究CouchDB支持的应用程序.基本上,我想为我的应用程序的每个用户创建一个数据库.为此,admin用户将创建数据库,但是在此之前,用户需要访问他们的数据库(使用SSL Auth over SSL).我一直都在想着解决这个问题.
我发现的最好的资源是CouchDB wiki,在这个链接:
http://wiki.apache.org/couchdb/Security_Features_Overview#Authorization
它建议您可以通过创建名为"_security"的文档来设置每个数据库的授权,您可以在其中添加管理员和读者的哈希值.当我尝试创建该文档时,我收到的消息是"Bad special document member:_security".
$ curl -X GET http://localhost:5984
{"couchdb":"Welcome","version":"1.0.1"}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
干杯,
亚伦.
由于CouchDB不支持SQL类似的AUTO_INCREMENT,您的方法是为文档生成顺序唯一数字ID?
编辑:
我需要数字ID有几个原因:
我知道复制等问题.这就是为什么我对人们如何克服这个问题感兴趣.
我删除了一个文档,但我仍然可以看到它_changes,所以我可以看到最后有效_rev,删除了,所以获取带有id和最后修订的doc只返回:
{
"_id":"25efa4ec8489d8b89b34c5cad6000059",
"_rev":"3-a982bd6dccce8f405433f8453ab86880",
"_deleted":true
}
Run Code Online (Sandbox Code Playgroud)
而没有其他属性.
我怎样才能在这种情况下恢复?以前的版本无法看到_changes.写空文档(设置_deleted为false)有助于查看所有修订信息吗?
我正在构建一个需要存储敏感信息的应用程序,这意味着数据在我的数据库中加密,以便有权访问数据库的黑客/员工无法解密敏感数据.但是,它仍然需要可搜索(在某个级别).
我理解可能必须做出某些妥协.例如,我愿意保留一些未加密的数据属性,以便在必要时使它们可索引,但"主体"必须加密.
存储需要由授权人员查看,搜索和/或排序的敏感数据的最佳实践和方法有哪些?
(我正在考虑从"正文" 中提取非停止词并在加密正文之前将它们按字段随机排列,然后将该字段提供给搜索索引器,我怀疑它提供了任何真正的安全性.)
我在我的视图功能中有这个:
emit([doc.address.country,doc.address.state, doc.address.city], doc);
Run Code Online (Sandbox Code Playgroud)
当我查询搜索时,我需要填充数组的所有3个元素,例如:
?key=["US","NY","New York"]
Run Code Online (Sandbox Code Playgroud)
这将产生我的记录,但举例来说,我只想返回美国的所有内容,例如:
?key=["US"]
Run Code Online (Sandbox Code Playgroud)
或者在美国和州......
?key=["US","NY"]
Run Code Online (Sandbox Code Playgroud)
或者...让我们说也许我只想要来自纽约的所有记录...(我知道以下不起作用)
?key=["","NY"]
Run Code Online (Sandbox Code Playgroud)
如果你想将数组中的一个元素留空,我真的不知道如何搜索?
我不能在两个couchdb服务器之间复制,所以我想从一个服务器转储到文件并从文件加载到另一个服务器.
我用这个语句转储,它工作正常:
curl -X GET http://localhost:5984/<DATABASE_NAME>/_all_docs?include_docs=true > FILE.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我使用此语句加载时:
curl -d @FILE.txt -H “Content-Type: application/json” -X POST http://localhost:5984/<DATABASE_NAME>/_bulk_docs
Run Code Online (Sandbox Code Playgroud)
它失败了:
curl: (6) Could not resolve host: application; Host not found {"error":"bad_content_type","reason":"Content-Type must be application/json"}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?