Фон
Мы очень старались придумать решения для приложения с высокой производительностью. Приложение в основном является высокопроизводительным менеджером памяти, с синхронизацией с диском. "Чтение" и "запись" чрезвычайно высокие, около 3000 транзакций в секунду. Мы стараемся делать как можно больше в памяти, но в итоге данные становятся устаревшими и должны быть сброшены на диск, и именно здесь происходит огромное "узкое место". Приложение многопоточное, с примерно 50 потоками. Нет IPC (inter-process comms)
Попытки
Мы изначально написали это на Java, и он работал достаточно хорошо, вплоть до определенной загрузки, узкое место было поражено, и он просто не мог идти в ногу со временем. Затем мы попробовали его на С#, и та же бутылочная шее была достигнута. Мы пробовали это с неуправляемым кодом (С#), и хотя на начальных тестах было ослеплятельно быстро, используя MMF (файлы карты памяти), в производстве чтение было медленным (используют Views). Мы попробовали CouchBase, но мы столкнулись с проблемами, связанными с высоким использованием сети. Это может быть плохой настройкой с нашей стороны!
Дополнительная информация:. В нашей попытке Java (не MMF) наш поток с очередью информации, которую нужно очистить на диске, строит в той мере, когда он не может продолжать "писать", на диск. В нашем подходе к файлу карты памяти С# проблема заключается в том, что READS работают очень медленно, и WRITES работают отлично. По какой-то причине представления медленны!
Вопрос
Итак, вопрос заключается в ситуациях, когда вы намерены передавать огромные объемы данных; кто-то может помочь с возможным подходом или архитектурным проектом, который может помочь? Я знаю, что это кажется немного шире, но я думаю, что конкретный характер высокой производительности и высокой пропускной способности должен сузить ответы.
Может ли кто-нибудь ручаться за использование Couchbase, MongoDB или Cassandra на таком уровне? Другие идеи или решения будут оценены.