neo4jclient本身使用REST API,因此與直接API調用相比,您已經限制了性能(通過帶寬,網絡延遲等) (爲此你需要Java)。
一些初步想法&測試嘗試:
顯然有一些事情,如CPU等,這會造成一定的限制,一些事情要考慮:
- 是在同一臺機器上的Neo4j服務器?
- 您是否通過Visual Studio嘗試過您的應用程序而不是? (即不調試)
在我的測試代碼(如下圖),我得到10個條目中〜200ms的 - 你可以嘗試在一個簡單的控制檯應用程序的代碼,看看你得到了什麼?
private static void Main()
{
var client = new GraphClient(new Uri("http://localhost.:7474/db/data"));
client.Connect();
for (int i = 0; i < 10; i++)
CreateEmptyNodes(10, client);
}
private static void CreateEmptyNodes(int numberToCreate, IGraphClient client)
{
var start = DateTime.Now;
for (int i = 0; i < numberToCreate; i++)
client.Create(new object());
var timeTaken = DateTime.Now - start;
Console.WriteLine("For {0} items, I took: {1}ms", numberToCreate, timeTaken.TotalMilliseconds);
}
編輯:
這是一個原始的HttpClient的方法來調用「創建」,我相信很是類似什麼neo4jclient引擎蓋下是這樣做的:現在
private async static void StraightHttpClient(int iterations, int amount)
{
var client = new HttpClient {BaseAddress = new Uri("http://localhost.:7474/db/data/")};
for (int j = 0; j < iterations; j++)
{
DateTime start = DateTime.Now;
for (int i = 0; i < amount; i++)
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Post, "cypher/") { Content = new StringContent("{\"query\":\"create me\"}", Encoding.UTF8, "application/json") });
if(response.StatusCode != HttpStatusCode.OK)
Console.WriteLine("Not ok");
}
TimeSpan timeTaken = DateTime.Now - start;
Console.WriteLine("took {0}ms", timeTaken.TotalMilliseconds);
}
}
,如果你根本不在意這個迴應,你可以直接打電話Client.SendAsync(..)
,這會讓你的速度達到每秒2500個。但是顯然這裏最大的問題是,你不一定發送了任何這些創建,你基本上已經排隊,所以關閉你的程序後,很可能你會沒有任何條目,或者一個非常少數。因此..清楚的代碼可以處理一秒鐘內觸發x千次調用而沒有任何問題,(我已經使用ServiceStack和RestSharp完成了類似的測試,兩者都採用與HttpClient相似的時間)。
它所不能做的就是以同樣的速度發送這些實際的服務器,所以我們通過窗戶限制HTTP棧和/或如何快速n4j可以處理該請求並提供響應。
我已經跑了你的代碼:平均它(創建10個節點)需要400毫秒〜。此應用程序產生約40 KB/s的網絡活動 - 我認爲網絡吞吐量不是瓶頸。我根本沒有看到瓶頸,但速度很慢......而當我使用4個線程時,每10個節點需要大約4 * 400毫秒。 –
請參閱此鏈接:http://comments.gmane.org/gmane.comp.db.neo4j.user/11002。他們正在談論每秒超過500個節點。而且他們也使用REST API –
我已經使用HttpClient添加了一個示例(上圖),我相信n4jclient會在引擎蓋下進行操作。我不知道他們是如何每秒實現500個節點的,當然我的(有限的)關於.net的基於靜止的直接通信的知識似乎並不明顯。 我懷疑Tatham能夠解釋這個問題,並且比我更好地解釋它。 –