我没有得到我期望使用Apache Ignite DataGrid的性能。我尝试了一些配置更改,但此时不知道如何调查性能瓶颈,并且正在寻求专家帮助。
我使用Apache Ignite使用我调用ByteArray的包装类来缓存字节数组。我的测试代码尝试通过调用多个puts然后从另一个进程多次获取来对缓存性能进行基准测试。我尝试在同一节点和不同节点上运行get进程。我还使用Java HashMap作为我的缓存创建了一个基线性能规范,这具有更好的性能(put为10000x)。
现在,在同一节点上,我得到以下内容: Hashmap缓存,同一节点:放2600 MB / s;获得300 MB / s 点燃相同的节点缓存:放0.4 MB / s;获得2.0 MB / s 点亮缓存,2个节点:放0.3 MB / s;得到0.7 MB / s
我在复制模式下运行它们但是我看到了分区模式的类似结果。我运行多次迭代测试并平均时间。我的节点有25GB内存,我的测试消耗约1GB。我已将VM配置为最大使用10GB。
提前感谢您对此问题的任何见解。
答案 0 :(得分:1)
首先,将Ignite性能与HashMap
进行比较并不是很有意义。 Ignite是一个分布式和可扩展的系统,而HashMap
甚至不是线程安全的。
您使用private void dtGrid_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
int intKeyValue;
try
{
if (dtGrid.CurrentColumn.DisplayIndex == 1)
{
if (e.Key == Key.Enter || e.Key == Key.Return || e.Key == Key.Tab || e.Key == Key.NumLock)
{
SendKeys.SendWait("{TAB}");
}
else
{
intKeyValue = GetNumericValue(e.Key.ToString());
if (e.Key == Key.LeftShift || e.Key == Key.RightShift || e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
e.Handled = true;
}
else
{
if (intKeyValue < 0 || intKeyValue > 9)
{
System.Windows.MessageBox.Show("Only numbers are allowed.");
e.Handled = true;
}
}
}
}
}
catch (Exception ex)
{
string strMsg = "Error occured in Start Row key event. ";
System.Windows.MessageBox.Show(strMsg + ex.Message);
//throw new NotImplementedException();
}
}
private void dtGrid_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
e.Handled = true;
UpdateRowSize();
}
private void UpdateRowSize()
{
DataTable dtFieldSizes = new DataTable();
int intRowSize;
string strTotalRowSizeData;
string[] strRowSizeInfo;
try
{
intRowSize = 0;
dtGrid.UpdateLayout();
dtFieldSizes = ((DataView)dtGrid.ItemsSource).ToTable();
for (int intRowCnt = 0; intRowCnt < dtFieldSizes.Rows.Count; intRowCnt++)
{
intRowSize += Convert.ToInt16(dtFieldSizes.Rows[intRowCnt]["Size"]);
}
strTotalRowSizeData = lblRowSize.Content.ToString();
strRowSizeInfo = strTotalRowSizeData.Split(':');
if (Convert.ToInt16(strRowSizeInfo[1]) != intRowSize)
{
lblRowSize.Content = strRowSizeInfo[0] + ": " + Convert.ToString(intRowSize);
}
}
catch (Exception ex)
{
string strMsg;
strMsg = "RefreshRowSize, error '" + ex.Message + "' has occurred.";
System.Windows.MessageBox.Show(strMsg);
}
}
作为基线的事实让我认为您的测试是单线程的。如果您尝试从多个线程/客户端查询Ignite,我相信您会发现更好的吞吐量。
另请注意,使用Ignite意味着通过网络发送数据。你有可能受到速度的限制。