C# 卡桑德拉有什么问题?

C# 卡桑德拉有什么问题?,c#,java,.net,linux,cassandra,C#,Java,.net,Linux,Cassandra,嗯。我在读关于卡桑德拉的文章,我读到的每一篇文章都提到,由于最终的一致性,卡桑德拉的写作速度非常“快” 我在linux机器上安装了cassandra,创建了一个模式,并使用fluent cassandra客户端通过c#创建了一个客户端。因为我无法通过fluent cassandra客户端访问远程cassandra实例,所以它不起作用 所以我在windows上安装了cassandra,创建了模式等等 接下来,我向cassandra插入了100万条条目,花了大约12分钟。客户机和服务器位于同一台机器

嗯。我在读关于卡桑德拉的文章,我读到的每一篇文章都提到,由于最终的一致性,卡桑德拉的写作速度非常“快”

我在linux机器上安装了cassandra,创建了一个模式,并使用fluent cassandra客户端通过c#创建了一个客户端。因为我无法通过fluent cassandra客户端访问远程cassandra实例,所以它不起作用

所以我在windows上安装了cassandra,创建了模式等等

接下来,我向cassandra插入了100万条条目,花了大约12分钟。客户机和服务器位于同一台机器上,这台机器是四核的,带有8GB ram

这并不快。我用MongoDB做了类似的测试,花了4分钟向它写入了100万个文档

我用ObjectiveYoodBMS做了一个smiliar测试,插入一百万个对象花了30秒

卡桑德拉有什么问题,根据我的测试,它不快?

在具有不同客户端(如Java)的linux服务器上,它的行为会有所不同吗?

除了对Cassandra进行一些研究之外,我还没有使用过它,但使用过MongoDB。希望这些想法/笔记能有所帮助

在一台独立的机器上,使用mongoimport,我能够在大约6分钟内将大约2400万个文档加载到MongoDB中。您写入100万的4分钟时间看起来确实很慢—因素可能是:磁盘速度/插入方式—例如,如果您一次插入一个文档,那么速度会变慢。特别是如果你使用安全模式(我不知道卡桑德拉是否有同样的东西)。您应该改为通过批处理API之一进行插入(例如,C#驱动程序上的InsertBatch)。同样的情况也适用于Cassandra(1乘1=缓慢,批量插入=更快)。正是这种轻松添加节点以扩展写入/读取的能力,真正为您提供了这些技术的完整(且公平)画面

显然,在一台独立的机器上,您将有可能成为一个因素的争用

需要注意的是,像MongoDB和Cassandra这样的技术使得扩展变得非常容易。e、 g.在MongoDB术语中,您可以通过使用分片扩展写入(即增加吞吐量)。特别是当您访问更大的数据量时,能够让十几个节点同时接受写入显然有助于改善IO状况并增加写入。同样,您可以使用副本集扩展读取


总之,我的问题是,您如何插入这些文档?是否以最有效的/批处理的方式插入这些文档?

测试设计为在单个机箱上大规模分发的解决方案的性能几乎毫无意义。尝试在两个不同的可用性区域(或任何您想要的云技术)的10个EC2实例上进行实验,比较Cassandra、MongoDB和ObjectiveYoODBMS。Cassandra的要点是作为一个可扩展的、大规模分布的商店,其速度非常快。(注意:@all:我不是卡桑德拉的脑袋,对于速度的说法——如果确实有人这样说的话——是否属实,我没有任何意见,所以请不要炒我鱿鱼;关键是测试应用不当。)@user:你真正的问题是什么?“Cassandra的好处是什么?”“为什么Cassandra在我的测试中比MongoDB和ObjectiveYoODBMS慢得多?”我理解你的推理,但我仍然希望写入速度比这快得多。@用户:我上面说过:你使用Cassandra的方式与它的设计目的完全不符。(你可以在不到10分钟的时间内将一百万条记录插入MySQL服务器,就像你描述的那样。)无论如何,我要退出这次对话,因为我不是一个Cassandra专家,这只是工具的设计目标和你的测试之间的不匹配,仅此而已。希望你能找到一个很好的解决方案。最好的,好吧,我明白你的意思,这就是为什么我投了更高的票。谢谢。我一次插入一个项目,没有批量插入。一次1个,从一个线程编写,在任何数据库技术中都是无效的。就像在SQL Server中一样,插入相同的2400万行在大容量加载中大约需要4.5分钟,但如果按1乘以1.True进行插入,则需要更长的时间。我也在用同样的方法处理mongodb和objy等其他人。