Sylvain Lebresne created CASSANDRA-7857:
-------------------------------------------
Summary: Ability to froze UDT
Key: CASSANDRA-7857
URL: https://issues.apache.org/jira/browse/CASSANDRA-7857
Project: Cassandra
Issue Type: Improvement
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
Fix For: 2.1.0
Currently, UDT are serialized into a single value. For 3.0, we want to change
that somewhat and allow updating individual subfields: CASSANDRA-7423 (and
ultimately, we'll probably allow querying subpart of UDT to some extend). Also
for 3.0, we want to allow some nesting of collections (CASSANDRA-7826).
However, migrating the currently serialized UDT would be challenging. Besides
that, even with nested collections, we probably won't be able to support
nesting within map keys and sets without serializing (at the very least, not
initially). Also, it can be useful in some specific case to have UDT or
collections for PK columns, even if those are serialized.
So we need a better way to distinguish when a composite types (collections &
UDT) are serialized (which imply you can't update subpart of the value, you
have to rewrite it fully) and when they are not. The suggestion is then to
introduce a new keyword, {{frozen}}, to indicate that a type is serialized:
{noformat}
CREATE TYPE foo (a int, b int);
CREATE TABLE bar (
k frozen<foo> PRIMARY KEY,
m map<frozen<set<int>>, text>
)
{noformat}
A big advantage is that it makes the downside (you can't update the value
without rewriting it all) clear and upfront.
Now, as of 2.1, we only support frozen UDT, and so we should make this clear by
1) adding the frozen keyword and 2) don't allow use of UDT unless they are
"frozen" (since that's all we really support). This is what this ticket
proposes to do. And this should be done in 2.1.0 or this will be a breaking
change.
We will have a follow-up ticket that will extend {{frozen}} to collection, but
this is less urgent since this will be strictly an improvement.
I'll note that in term of syntax, {{serialized}} was suggested as an
alternative to {{frozen}}. I personally have a minor preference for
{{serialized}} but it was argued that it had a "sequential" connotation which
{{frozen}} don't have. Changing that is still up for discussion, but we need to
reach a decision quickly.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)