我使用他们的图像在Azure上设置了DataStax Cassandra Sandbox.我能够在服务器上本地运行OpsCenter而没有任何问题.安装是Ubuntu,我很新.
根据Apache Cassandra远程访问的这篇文章,我应该能够将我的rpc_address设置为0.0.0.0以允许远程访问我的数据库.但是,它说我在本地Windows 8 PC上尝试从DevCenter连接时无法连接.
这是我的设置:

联系人主机地址是Azure中为我的VM显示的虚拟IP地址.该端口与cassandra.yaml配置文件中显示的端口相同.我没有配置任何授权,根据我的阅读,我应该能够使用.NET或管理工具进行连接但不起作用.

我还检查了端口是否打开,据我所知:

我知道它会是9160或9042.
我看到有些人建议WCF服务调用数据层,有一个包含返回数据的对象,然后将其放入数据协定中.我的问题是为什么不将数据合同粘贴在数据层本身而只是返回它们?这样做有缺点吗?我问的原因是我的数据层只是一个类库,我希望能够从可能没有使用webservice的多个平台调用它.我似乎无法找到关于此的最佳做法.有任何想法吗?
我设置了Windows Azure缓存,因为我想要一种高性能的方式来在多个Web角色之间共享实时数据.我已经读过,使用旧的共享缓存超过10毫秒的访问时间通常表明存在问题,新的Windows Azure缓存预览应该更快.但是,从缓存中读取和写入单个值只需要一秒钟.我认为这可能是我的设置,所以我运行了天蓝色延迟测试项目,我得到的这些时间并没有那么糟糕,但仍然很慢:
1000 Add Operations
Average cache latency/key: 104.318ms
1000 Get Operations
Average cache latency/key: 96.881ms
1000 Put Operations
Average cache latency/key: 105.48ms
BulkGet of 1000 Keys from Local Cache
Average cache latency/key: 4.641ms
1000 Remove Operations
Average cache latency/key: 254.14ms
Run Code Online (Sandbox Code Playgroud)
这是代码的链接,而不是试图发布所有相当大的代码:http: //code.msdn.microsoft.com/windowsazure/Windows-Azure-Cache-c3e80a1f
这是我的web.config设置:
<dataCacheClients>
<dataCacheClient name="default">
<autoDiscover isEnabled="true" identifier="X" />
<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />
<securityProperties mode="Message" sslEnabled="false">
<messageSecurity authorizationInfo="X" />
</securityProperties>
</dataCacheClient>
</dataCacheClients>
Run Code Online (Sandbox Code Playgroud)
我错过了什么,或者这些是我可以期待的那种惨淡的时刻?
由于linq不允许你在linq查询中使用Date()方法,所以我读到了使用DbFunctions.TruncateTime,它可以正常工作,直到你尝试在匿名类型中使用它,这是我需要做的以便分组多个领域.我也尝试使用我的字段的日期部分创建一个新的日期时间,但这也不起作用(再次出现相同的错误).
我的查询看起来像
kw = kw
.GroupBy(x => new { DbFunctions.TruncateTime(g.SummaryHour), x.KeywordID })
.SelectMany(x => x)
.OrderByDescending(x => x.KeywordID);
Run Code Online (Sandbox Code Playgroud)
我尝试像groupby.groupby一样将这个组织链接起来......但这并没有给我相同的结果.我能用这种方式做到吗?我基本上试图过滤掉我的约会的时间部分和其他领域的分组.
我在 Linux Ubuntu 机器上设置了 DataStax Enterprise 4.6.6。OpsCenter 和 DevCenter 工作正常。我可以毫无问题地写入数据库等。
然而,许多演示和命令行工具返回以下错误:
无法确定 DSE_ENV
发生这种情况的一个例子是:
节点工具状态
我找到了一个名为的文件DSE_ENV.sh,它似乎设置了一些环境变量,例如DSE_HOME. 但是当我echo $DSE_HOME例如未设置变量时。我不知道这个文件是否永远不会被调用,或者是什么导致了这个问题。
我发现这篇文章专门针对dse未启动的服务,而我的情况并非如此:https :
//support.datastax.com/hc/en-us/articles/204226189-DSE-fails-to-start-有错误-DSE-ENV-无法确定
然而,我尝试运行它提到的权限命令,但没有运气。
我读过许多人们遇到类似问题的帖子,但他们似乎做出了不适用的假设,或者他们的代码根本不适用于我.我需要结合异步方法的结果.我想要的唯一的异步是结果的组合.由于Azure Service Bus一次只允许我抓取256条消息,因此我想发送多个请求以同时获取几个批次并将其整合到一个列表中.
似乎有一个假设,如果你正在调用异步方法,你想在工作完成时返回调用者(即:一些长时间运行的任务).但是,我根本不想这样做.我想等待任务完成,然后取出我的组合列表并将其返回.
首先,我不想用异步标记我的调用方法.我可以,但为什么我应该在回到我之前调用一个碰巧执行某些异步操作的同步方法.
我已经看到使用WhenAll()然后使用Result的示例,但这对我不起作用.我已经尝试了所有不同的排列,但它要么锁定我的应用程序,要么告诉我任务尚未执行.
这是我目前的情况:
public IEnumerable<BrokeredMessage>[] GetCombinedResults()
{
var job = () => ServiceBus.TrackerClient.ReceiveBatchAsync(BatchLimit);
Task<IEnumerable<BrokeredMessage>> task1 = _retryPolicy.ExecuteAsync<IEnumerable<BrokeredMessage>>(job);
Task<IEnumerable<BrokeredMessage>> task2 = _retryPolicy.ExecuteAsync<IEnumerable<BrokeredMessage>>(job);
IEnumerable<BrokeredMessage>[] results = Task.WhenAll<IEnumerable<BrokeredMessage>>(task1, task2).Result;
return results;
}
Run Code Online (Sandbox Code Playgroud)
但调用结果会导致锁定.我已经读过这样做会发生死锁但是已经将其作为其他问题的答案.如果我调用Task.WaitAll()并且不关心结果,这种类型的设置工作正常.当我想要从任务返回的结果时,不确定为什么这变得困难.我尝试过使用Task.Run但是在得到结果之前它会退出我的方法.
c# ×4
azure ×3
cassandra ×2
datastax ×2
.net ×1
async-await ×1
asynchronous ×1
linq ×1
nodetool ×1
performance ×1
sql ×1
wcf ×1
web-services ×1