#c# #aerospike
#c# #aerospike
Вопрос:
У меня есть данные, как показано ниже :
-------- ----------- --------- ---------
| COMPANY| COLOR | OWNER | MODEL |
-------- ----------- --------- ---------
|Benz | Red | p1 | ABC |
-------- ----------- --------- ---------
|BMW | Blue | P2 | XYZ |
-------- ----------- --------- ---------
|Ferrari | YelloW | P3 | PQR |
-------- ----------- --------- ---------
|Audi | Blue P4 | MNO |
------------------------------------------
Теперь мне нужны записи, в которых либо компания Benz, либо цвет синий, либо владелец P2. Я просмотрел документацию Aerospike, но не смог найти никакого способа, с помощью которого мы могли бы выполнять такие операции в одном запросе. Я хочу смоделировать этот SQL-запрос в aerospike с помощью C # client:
select * from tablename where (company = Benz or Color = Blue or Owner = P1)
Комментарии:
1. Не используется areospike, но выражения, возможно, то, что вы ищете aerospike.com/docs/guide/expressions/logical
Ответ №1:
Вы можете использовать выражения в Aerospike именно для этого. Приведенный ниже пример Java, более доступный в примерах клиентской библиотеки Aerospike Java (публичное хранилище). Это из QueryExp.java . (Для клиента C # см.: QueryExp.cs в клиентском коде Csharp / Framework / AerospikeDemo)
private void runQuery1(
AerospikeClient client,
Parameters params,
String binName
) throws Exception {
int begin = 10;
int end = 40;
console.info("Query Predicate: (bin2 > 126 amp;amp; bin2 <= 140) || (bin2 = 360)");
Statement stmt = new Statement();
stmt.setNamespace(params.namespace);
stmt.setSetName(params.set);
// Filter applied on query itself. Filter can only reference an indexed bin.
stmt.setFilter(Filter.range(binName, begin, end));
// Predicates are applied on query results on server side.
// Predicates can reference any bin.
QueryPolicy policy = new QueryPolicy(client.queryPolicyDefault);
policy.filterExp = Exp.build(
Exp.or(
Exp.and(
Exp.gt(Exp.intBin("bin2"), Exp.val(126)),
Exp.le(Exp.intBin("bin2"), Exp.val(140))),
Exp.eq(Exp.intBin("bin2"), Exp.val(360))));
RecordSet rs = client.query(policy, stmt);
try {
while (rs.next()) {
Record record = rs.getRecord();
console.info("Record: " record.toString());
}
}
finally {
rs.close();
}
}