Низкая производительность записи Cassandra - PullRequest
6 голосов
/ 06 декабря 2011

Я новичок в NoSQL и Кассандре. Я экспериментирую с настройками, чтобы получить только решение в кеш-памяти. Я обрабатываю, читая построчно из файла 100000 строк и используя Гектор для вставки в Кассандру. Я заметил очень низкую пропускную способность - около 6000 вставок в секунду. Вся операция записи около 20,5 секунд, что недопустимо для нашего приложения. Нам нужно что-то вроде 100000 вставок в секунду. Я тестирую на компьютере под управлением Windows 7 с 4 ГБ ОЗУ.

Я делаю тест только для вставки.

Пожалуйста, дайте мне знать, где я иду не так. Пожалуйста, подскажите, как я могу улучшить количество вставок в секунду.

Keyspace: Keyspace1
        Read Count: 0
        Read Latency: NaN ms.
        Write Count: 177042
        Write Latency: 0.003106884242157228 ms.
        Pending Tasks: 0
                Column Family: user
                SSTable count: 3
                Space used (live): 17691
                Space used (total): 17691
                Number of Keys (estimate): 384
                Memtable Columns Count: 100000
                Memtable Data Size: 96082090
                Memtable Switch Count: 1
                Read Count: 0
                Read Latency: NaN ms.
                Write Count: 177042
                Write Latency: NaN ms.
                Pending Tasks: 0
                Key cache capacity: 150000
                Key cache size: 0
                Key cache hit rate: NaN
                Row cache capacity: 150000
                Row cache size: 0
                Row cache hit rate: NaN
                Compacted row minimum size: 73
                Compacted row maximum size: 924
                Compacted row mean size: 784

Я пробовал несколько способов настройки кэша строк и ключей:

  1. Через CLI Кассандры

  2. Через NodeCmd: java org.apache.cassandra.tools.NodeCmd -p 7199 setcachecapacity Keyspace1 user 150000 150000

Ответы [ 2 ]

9 голосов
/ 07 декабря 2011

Я бы не охарактеризовал 6000 операций записи в секунду как «медленные», но Кассандра может работать намного лучше.Но обратите внимание, что Cassandra предназначена для длительной записи, поэтому может дать более низкую производительность, чем решения для кэширования только с памятью.

Как говорит sbridges, вы не можете добиться полной производительности Cassandra с помощью одного клиента.Попробуйте использовать несколько клиентских потоков, или процессов, или машин.

Я не думаю, что вы получите 100 000 операций записи в секунду на одном узле.Я получал только около 20 000-25 000 записей в секунду на скромном оборудовании (хотя Cassandra стала значительно быстрее с тех пор, как я провел этот тест).6000 в секунду кажется подходящим для одного клиента против одного товарного узла.

С кластером узлов вы определенно можете получить 100 000 в секунду (см. http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html для недавнего теста в 1 000 000 записейв секунду!)

Кэширование строк и кеширование ключей помогают повысить производительность чтения, а не производительность записи.

Кроме того, убедитесь, что вы выполняете пакетную запись (при необходимости) - это уменьшит сетьнакладные расходы.

8 голосов
/ 06 декабря 2011

Сколько потоков / процессов вы используете для выполнения вставок?Вызовы Гектора являются синхронными, поэтому, если вы используете только 1 поток на стороне клиента, это может стать вашим узким местом.

...