ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vladimir Ozerov <voze...@gridgain.com>
Subject Re: Key type name and value type name for CREATE TABLE
Date Wed, 07 Jun 2017 09:12:46 GMT
Sergi,

This will require additional coordination between nodes, so I would not do
that for now. We have more serious problem here - binary metadata in
current implementation is not suited for DDL operations. We will feel it
better when start working on ALTER TABLE command, when single attribute
could change it's type in runtime, which is not supported by binary
metadata at the moment (this is append-only structure).

So I would put aside any questions around type names and metadata for now
and just let CREATE TABLE work. Hopefully in 2.2 we will have binary
metadata persistence, and align binary metadata with CREATE TABLE and ALTER
TABLE commands correctly.

On Wed, Jun 7, 2017 at 11:28 AM, Sergi Vladykin <sergi.vladykin@gmail.com>
wrote:

> Vova,
>
> May be it makes sense to have an increasing version instead of UUID?
>
> Like sql_myschema_Person_1_Key.
>
> So that user will be able to pass just a table name `Person` to our API and
> receive a correct latest type name for that table.
>
> What do you think?
>
> Sergi
>
> 2017-06-07 11:20 GMT+03:00 Vladimir Ozerov <vozerov@gridgain.com>:
>
> > Valya,
> >
> > It doesn't affect builder invoked from DML engine, as it know how to find
> > these names. As per users who want to call IgniteCache.put() on a cache
> > created through SQL - sorry, they will have hard times resolving actual
> > type name. This is OK for the first release, provided that we mask type
> > names for a reason - to avoid subtle exceptions when working with DDL and
> > DML.
> >
> > On Wed, Jun 7, 2017 at 5:50 AM, Valentin Kulichenko <
> > valentin.kulichenko@gmail.com> wrote:
> >
> > > Vova,
> > >
> > > If you add unique suffix losing human-readable type names, how will the
> > > builder approach work? Maybe it makes sense to add an API call that
> > returns
> > > current type name for a table?
> > >
> > > -Val
> > >
> > > On Tue, Jun 6, 2017 at 7:43 PM Dmitriy Setrakyan <
> dsetrakyan@apache.org>
> > > wrote:
> > >
> > > > Vova,
> > > >
> > > > I am not sure I like the key type name the way it is. Can we add some
> > > > separator between the table name and key name, like "_". To me
> > > "PERSON_KEY"
> > > > reads a lot better than "PERSONKey".
> > > >
> > > > D.
> > > >
> > > > On Tue, Jun 6, 2017 at 4:00 AM, Sergi Vladykin <
> > sergi.vladykin@gmail.com
> > > >
> > > > wrote:
> > > >
> > > > > Unique suffix is a good idea.
> > > > >
> > > > > Sergi
> > > > >
> > > > > 2017-06-06 13:51 GMT+03:00 Vladimir Ozerov <vozerov@gridgain.com>:
> > > > >
> > > > > > Igniters,
> > > > > >
> > > > > > In the very first implementation of CREATE TABLE we applied
the
> > > > following
> > > > > > rule to key and value type names:
> > > > > > keyTypeName == tableName + "Key"
> > > > > > valTypeName == tableName
> > > > > >
> > > > > > E.g.:
> > > > > > CREATE TABLE Person ...
> > > > > > keyTypeName == PERSONKey
> > > > > > valTypeName == PERSON
> > > > > >
> > > > > > After that user could potentially create objects with these
type
> > > names
> > > > > > manually and add them to cache through native Ignite API:
> > > > > >
> > > > > > BinaryObject key =
> > > > IgniteBinary.builder("PERSONKey").addField().build();
> > > > > > BinaryObject val = IgniteBinary.builder("PERSON")
> > > .addField().build();
> > > > > > IgniteCache.put(key, val);
> > > > > >
> > > > > > This approach has two problems:
> > > > > > 1) Type names are not unique between different tables. it means
> > that
> > > if
> > > > > two
> > > > > > tables with the same name are created in different schemas,
we
> got
> > a
> > > > > > conflict.
> > > > > > 2) Type names are bound to binary metadata, so if user decides
to
> > do
> > > > the
> > > > > > following, he will receive and error about incompatible metadata:
> > > > > > CREATE TABLE Person (id INT PRIMARY KEY);
> > > > > > DROP TABLE Person;
> > > > > > CREATE TABLE Person(in BIGINT PRIMARY KEY); // Fail because
old
> > meta
> > > > > still
> > > > > > has type "Integer".
> > > > > >
> > > > > > In order to avoid that I am going to add unique suffix or so
> (say,
> > > > UUID)
> > > > > to
> > > > > > type names. This way there will be no human-readable type names
> any
> > > > more,
> > > > > > but there will be no conflicts either. In future releases we
will
> > > relax
> > > > > > this somehow.
> > > > > >
> > > > > > Thoughts?
> > > > > >
> > > > > > Vladimir.
> > > > > >
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message