You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Bo Finnerup Madsen <bo...@gmail.com> on 2016/03/17 11:05:06 UTC
Data modelling, including cleanup
Hi,
We are pretty new to data modelling in cassandra, and are having a bit of a
challenge creating a model that caters both for queries and updates.
Let me try to explain it using the users example from
http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling
They define two tables used for reading users, one by username and one by
email.
---------------------------------------------------------------------
CREATE TABLE users_by_username (
username text PRIMARY KEY,
email text,
age int
)
CREATE TABLE users_by_email (
email text PRIMARY KEY,
username text,
age int
)
---------------------------------------------------------------------
Now lets pretend that we need to delete a user, and we are given a username
as a key. Would the correct procedure be:
1) Read the email from users_by_username using the username as a key
2) Delete from users_by_username using the username as a key
3) Delete from users_by_email using the email as a key
Or is there a smarter way of doing this?
Yours sincerely,
Bo Madsen
Re: Data modelling, including cleanup
Posted by Bo Finnerup Madsen <bo...@gmail.com>.
Hi Hannu,
Thank you for the pointer. We ended up using materialized views in
cassandra 3.0.3. Seems to do the trick :)
tor. 17. mar. 2016 kl. 11.16 skrev Hannu Kröger <hk...@gmail.com>:
> Hi,
>
> That’s how I have done it in many occasions. Nowadays there is the
> possibility use Cassandra 3.0 and materialised views so that you don’t need
> to keep two tables up to date manually:
> http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
>
> Hannu
>
> On 17 Mar 2016, at 12:05, Bo Finnerup Madsen <bo...@gmail.com>
> wrote:
>
> Hi,
>
> We are pretty new to data modelling in cassandra, and are having a bit of
> a challenge creating a model that caters both for queries and updates.
>
> Let me try to explain it using the users example from
> http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling
>
> They define two tables used for reading users, one by username and one by
> email.
> ---------------------------------------------------------------------
> CREATE TABLE users_by_username (
> username text PRIMARY KEY,
> email text,
> age int
> )
>
> CREATE TABLE users_by_email (
> email text PRIMARY KEY,
> username text,
> age int
> )
> ---------------------------------------------------------------------
>
> Now lets pretend that we need to delete a user, and we are given a
> username as a key. Would the correct procedure be:
> 1) Read the email from users_by_username using the username as a key
> 2) Delete from users_by_username using the username as a key
> 3) Delete from users_by_email using the email as a key
>
> Or is there a smarter way of doing this?
>
> Yours sincerely,
> Bo Madsen
>
>
>
Re: Data modelling, including cleanup
Posted by Hannu Kröger <hk...@gmail.com>.
Hi,
That’s how I have done it in many occasions. Nowadays there is the possibility use Cassandra 3.0 and materialised views so that you don’t need to keep two tables up to date manually:
http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views <http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views>
Hannu
> On 17 Mar 2016, at 12:05, Bo Finnerup Madsen <bo...@gmail.com> wrote:
>
> Hi,
>
> We are pretty new to data modelling in cassandra, and are having a bit of a challenge creating a model that caters both for queries and updates.
>
> Let me try to explain it using the users example from http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling <http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling>
>
> They define two tables used for reading users, one by username and one by email.
> ---------------------------------------------------------------------
> CREATE TABLE users_by_username (
> username text PRIMARY KEY,
> email text,
> age int
> )
>
> CREATE TABLE users_by_email (
> email text PRIMARY KEY,
> username text,
> age int
> )
> ---------------------------------------------------------------------
>
> Now lets pretend that we need to delete a user, and we are given a username as a key. Would the correct procedure be:
> 1) Read the email from users_by_username using the username as a key
> 2) Delete from users_by_username using the username as a key
> 3) Delete from users_by_email using the email as a key
>
> Or is there a smarter way of doing this?
>
> Yours sincerely,
> Bo Madsen
>