Cassandra Java Driver - QueryBuilder API vs PreparedStatements

Драйвер Datastax Java (cassandra-driver-core 2.0.2) для Cassandra поддерживает PreparedStatements, а также QueryBuilder. Какие-либо конкретные преимущества, связанные друг с другом? Недостатки?

Документация: http://www.datastax.com/documentation/developer/java-driver/2.0/common/drivers/reference/driverReference_r.html

В приведенном выше документе отсутствуют какие-либо преимущества перед использованием QueryBuilder API над PreparedStatements, кроме программных запросов к записи, что не является большим преимуществом (в моей книге).

Поделитесь своими мыслями и опытом. Спасибо.

Ответ 1

PreparedStatements дает вам повышение производительности, так как то, что вы выполняете, уже хранится на стороне сервера (при условии, что вы повторно используете операторы). Вы просто связываете новые конкретные значения и повторно выполняете инструкцию.

Конструктор запросов - это более удобный способ создания строкового оператора, который должен быть выполнен, так как он не требует никакой подготовки.

С точки зрения производительности первая опция самая быстрая, вторая и третья идентичны:

// below prepared statement has already been prepared, we're now just re-using
PreparedStatement ps = session.prepare("SELECT * FROM users WHERE uname=?");

1) session.execute(ps.bind('david');
2) session.execute("SELECT * FROM users WHERE uname=david");
3) session.exectute(QueryBuilder.select()
                                .all()
                                .from("users")
                                .where(QueryBuilder.eq('uname', 'david'))

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