Question

I am using a composite primary key consisting of 2 strings Name1, Name2, and a timestamp (e.g. 'Joe:Smith:123456'). I want to query a range of timestamps given an equality condition for either Name1 or Name2.

For example, in SQL:

SELECT * FROM testcf WHERE (timestamp > 111111 AND timestamp < 222222 and Name2 = 'Brown');

and

SELECT * FROM testcf WHERE (timestamp > 111111 AND timestamp < 222222 and Name1 = 'Charlie);

From my understanding, the first part of the composite key is the partition key, so the second query is possible, but the first query would require some kind of index on Name2.

Is it possible to create a separate index on a component of the composite key? Or am I misunderstanding something here?

Était-ce utile?

La solution

You will need to manually create and maintain an index of names if you want to use your schema and support the first query. Given this requirement, I question your choice in data model. Your model should be designed with your read pattern in mind. I presume you are also storing some column values as well that you want to query by timestamp. If so, perhaps the following model would serve you better:

"[current_day]:Joe:Smith" {
    123456:Field1 : value
    123456:Field2 : value
    123450:Field1 : value
    123450:Field2 : value
}

With this model you can use the current day (or some known day) as a sentinel value, then filter on first and last names. You can also get a range of columns by timestamp using the composite column names.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top