gpt4 book ai didi

ArangoDb .Net 驱动性能

转载 作者:行者123 更新时间:2023-12-02 01:42:11 28 4
gpt4 key购买 nike

我正在尝试新的 ArangoDb-Net 重新实现驱动程序 https://github.com/yojimbo87/ArangoDB-NET/tree/reimplement 。今天是我第一次尝试表演。当我使用 araongosh 执行插入时。它每秒可以插入大约 5000 条记录。但是,当我使用 .Net 驱动程序执行相同的更新时。我花了大约 2 分钟来执行相同的插入。我可以知道我做错了什么吗?谢谢。

[编辑] 完成问题 with the github discussion我已经用我的 arangosh 测试了下面的代码

count=1;
startTime=+new Date();
console.log(startTime);
while(count <= 10000)
{
db.someCollection.save({"Id":"1234567890123456789012345678901234",
"Key":1234567,
"Revision":1234567,
"Name":"Mohamad Abu Bakar",
"IC Number":"1234567-12-3444",
"Department":"IT Department",
"Height":1234,
"DateOfBirth":"2015-01-27 03:33",
"Salary":3333});
count++;
}
endTime=+new Date();
console.log(endTime);
console.log("Total time taken:" + (endTime - startTime)/1000);

完成操作用时 3.375 秒。

我用 .Net 驱动程序做了类似的事情,它花了将近 9.5797819。几乎是 arangosh 的三倍。这是 .Net 中的代码:

public static void TestArangoDb()
{
//ASettings.AddConnection("_system", "127.0.0.1", 8529, false, "_system");
//var db = new ADatabase("_system");
//db.Create("trial_sample");

ASettings.AddConnection("trial_sample",
"127.0.0.1", 8529, false, "trial_sample");
var db2 = new ADatabase("trial_sample");

db2.Collection.Create("someCollection");

DateTime startTime = DateTime.Now;
Console.WriteLine("Start Time: " + startTime.ToLongTimeString());

for(int count=1; count <= 10000; count++)
{
var employee = new Employee();
employee.Id = "1234567890123456789012345678901234";
employee.Key = "1234567";
employee.Revision = "1234567";
employee.Name = "Mohamad Abu Bakar";
employee.IcNumber = "1234567-12-3444";
employee.Department = "IT Department";
employee.Height = 1234;
employee.DateOfBirth = new DateTime(2015, 1, 27, 3, 33, 3);
employee.Salary = 3333;
var result = db2.Document.Create<Employee>("someCollection", employee);

//var updateDocument = new Dictionary<string, object>()
// .String("DocumentId", "SomeId");
//db2.Document.Update(result.Value.String("_id"), updateDocument);
}

DateTime endTime = DateTime.Now;
TimeSpan duration = endTime - startTime;
Console.WriteLine("End Time: " + endTime.ToLongTimeString());
Console.WriteLine("Total time taken: " + duration.TotalSeconds);
}

public class Employee
{
public string Id { get; set; }
public string Key { get; set; }
public string Revision { get; set; }
public string Name { get; set; }
public string IcNumber { get; set; }
public string Email { get; set; }
public string Department { get; set; }
public double Height { get; set; }
public DateTime DateOfBirth { get; set; }
public decimal Salary { get; set; }
}

如果我删除评论:

var updateDocument = new Dictionary<string, object>()
.String("DocumentId", "SomeId");

db2.Document.Update(result.Value.String("_id"), updateDocument);

性能差不多是30倍。完成需要 99.8789133 秒。事实上,我只是执行额外的更新以添加额外的列。

你能就上面代码中的问题提出建议吗?谢谢。

最佳答案

yojimbo87更深入地研究了这个问题。测试不同层发现了问题。

合并请求 #32 在创建、更新和替换通用对象的文档/边时提高了约 57% 的性能。

在本地机器上,使用给定的 Employee 示例对象创建单个文档现在使用驱动程序在 10k 迭代循环中平均需要 ~0.4ms。原始 .NET HTTP 请求(没有任何 ArangoDB 驱动程序抽象)在 10k 循环中需要大约 0.35 毫秒。不同之处在于从通用对象到字典的转换,这是由于属性处理(例如 IgnoreField、IgnoreNullValue 和 AliasField)而需要完成的。

NuGet package已更新以反射(reflect)此改进。

关于ArangoDb .Net 驱动性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27895828/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com