Я новичок в RavenDB и NOSQL в целом.
Чтобы проверить производительность, я написал очень грубый код с RavenDB.Client.
Я просто запускаю 500 одновременных задач, каждая из которых просто создает тестовый документ, используя новый сеанс для каждого запроса со случайным интервалом (1 с-10 с).
По какой-то странной причине запросы отправляются «пакетами» со скоростью около 150 записей / с в течение чуть менее минуты. Пробки?
И между этими очередями есть несколько минут.
При отладке приложения я могу установить точку останова на session.SaveChanges (), и она сразу же попадет в цель, поэтому я не уверен, является ли это пределом подключения к библиотеке ravenDB.Client (я полагаю, httpclient?) Или это фактическая база данных, ограничивающая запросы.
Любые предположения или советы, почему это может быть, будет принята с благодарностью!
Редактировать: как ни странно, при запуске только одной задачи без задержки между запросами она последовательно выполняет около 400-500 запросов / с.
private Database db = new Database();
public MainWindow()
{
InitializeComponent();
}
public async Task StartTests()
{
Random rnd = new Random();
//Start write threads
for(int i = 0; i < 500; i++)
{
Task.Run(() => WriteTest(rnd.Next(1000,10000)));
await Task.Delay(200);
}
return;
}
private async Task<bool> WriteTest(int delay)
{
Raven ravenDB = new Raven(db.Store);
int o = 0;
while (o == 0)
{
//Write to DB
ravenDB.CreateDocument();
await Task.Delay(delay);
}
return true;
}
private void start_Click(object sender, RoutedEventArgs e)
{
StartTests();
}
public class Database
{
public IDocumentStore Store;
public Database()
{
var store = new Lazy<IDocumentStore>(CreateStore);
Store = store.Value;
}
private static IDocumentStore CreateStore()
{
IDocumentStore store = new DocumentStore()
{
Urls = new[] { "http://localhost:3113" },
Database = "IADB"
}.Initialize();
return store;
}
}
public class Raven
{
IDocumentStore Store;
public Raven(IDocumentStore store)
{
Store = store;
}
public void CreateDocument()
{
using (var session = Store.OpenSession())
{
session.Store(new TestObject
{
Name = "TestObjectName",
RandomNumber = 123
});
session.SaveChanges();
}
}
private class TestObject
{
public string Name { get; set; }
public int RandomNumber { get; set; }
}
}
}