我刚刚导入了大量的数据在9节点集群卡桑德拉之前,我创建一个新的ColumnFamily甚至更多的数据,我希望能够确定我的集群目前有多满(在内存使用方面).我不太清楚我需要注意什么.我不想导入另外20-30GB的数据,并意识到我应该增加5-6个节点.
简而言之,我不知道我现在是否有太少/很多节点用于集群中的内容.
任何帮助将不胜感激 :)
$ nodetool -h 192.168.1.87 ring
Address DC Rack Status State Load Owns Token
151236607520417094872610936636341427313
192.168.1.87 datacenter1 rack1 Up Normal 7.19 GB 11.11% 0
192.168.1.86 datacenter1 rack1 Up Normal 7.18 GB 11.11% 18904575940052136859076367079542678414
192.168.1.88 datacenter1 rack1 Up Normal 7.23 GB 11.11% 37809151880104273718152734159085356828
192.168.1.84 datacenter1 rack1 Up Normal 4.2 GB 11.11% 56713727820156410577229101238628035242
192.168.1.85 datacenter1 rack1 Up Normal 4.25 GB 11.11% 75618303760208547436305468318170713656
192.168.1.82 datacenter1 rack1 Up Normal 4.1 GB 11.11% 94522879700260684295381835397713392071
192.168.1.89 datacenter1 rack1 Up Normal 4.83 GB 11.11% …Run Code Online (Sandbox Code Playgroud) 我正在为一个Web应用程序运行写密集型MongoDB,而且我的性能非常差.话虽这么说,我相当肯定问题与我们的代码,设置和/或我们的使用有关,而不是mongo本身.
我打算用绝望的大锤打开我的头,所以我想知道是否有人会介意看看我准备好的一些输出,看看是否有任何问题.
代码不是太复杂(它在PHP中,顺便说一句).它几乎是 - > find()和 - > update().我确保为这两个调用使用索引,并确认它们确实被查询使用explain().
我已经尝试了1台服务器(ec2 m2.2xlarge),4台服务器(2台服务器的2个分片)和9台服务器(3个服务器的3个分片)并且无法从中获得更多.
在好的时刻,我无法获得超过每秒1500次写入(插入+更新).大多数时候,我很幸运能够达到100次插入/更新的总和,并且我总是有一个很大的"锁定%"并且很多查询排队等待"qr | qw".
现在,我有一个正在运行的脚本,它正在爬行.最糟糕的是,当我查看mongostat一段时间时,"res"中使用的RAM量大约是服务器可用RAM的50%,并且有足够的RAM来容纳所有集合的索引.没有理由为什么这不会像疯了一样吐出数据.
我必须已经将应用程序重新编码2-3次,试图找到更好的数据访问模式.我已经读过关于索引,更新,分片键以及什么不能读取的所有内容.我把mongo打开的所有服务器都使用了8个EBS磁盘raid 10设置并添加了一些性能调整(blockdev,noatime等等).
我知道问题出在我的最后,我不是在责备mongodb.我知道比我更大的公司正在将它用于密集型应用程序并且他们非常喜欢它(例如foursquare).与此同时,我无法理解我做错了什么以及为什么我的表现如此糟糕,无论我做什么.
附加信息:
我目前正在使用NSFileManager setAttributes来更改目录的权限.我的问题是它似乎没有递归地这样做.有没有办法强迫它这样做?
我试图将以下c#代码转换为PHP,但我不知道要使用哪个pack()参数.
var xorkey = BitConverter.ToUInt32(filedata, 0) >> 8;
xorkey *= 0x8083;
for (var i = 8; i < filedata.Length; i += 0x4)
{
BitConverter.GetBytes(BitConverter.ToUInt32(filedata, i) ^ xorkey).CopyTo(filedata, i);
xorkey ^= BitConverter.ToUInt32(filedata, i);
}
filedata = filedata.Skip(4).ToArray();
Run Code Online (Sandbox Code Playgroud)
编辑 - 一直在努力,我到目前为止似乎工作.
$xorkey = unpack("L", $filedata)[1] >> 8;
$xorkey *= 32899; // 32899 == 0x8083
for ($i = 8; $i < strlen($filedata); $i += 4) {
$bytes = unpack("L", substr($filedata, $i))[1] ^ $xorkey;
// left to do: BitConverter.GetBytes($bytes).CopyTo(filedata, i);
// this doesn't work: …Run Code Online (Sandbox Code Playgroud)