But it is safe to change non-primary-key columns from int to varint, right?

2017-01-11 10:09 GMT+01:00 Tom van der Woerdt <tom.vanderwoe...@booking.com>
:

> Actually, come to think of it, there's a subtle serialization difference
> between varint and int that will break token generation (see bottom of
> mail). I think it's a bug that Cassandra will allow this, so don't do this
> in production.
>
> You can think of varint encoding as regular bigints with all the leading
> zero bytes stripped off. This means the varint decoder will happily decode
> the tinyint, smallint, int, and bigint types, but the encoder won't
> necessarily re-encode to the same thing. Specifically, any int below
> 8388608 will have a different encoding in a varint.
>
> There's a small performance impact with the varint encoding and decoding
> scheme, but likely insignificant for any reasonable use case.
>
> Tom
>
>
>
>
>
>
> cqlsh> select * from foo where id in (1, 128, 256, 65535, 65536, 16777215,
> 16777216, 2147483647);
>
>  id         | value
> ------------+-------
>           1 |  test
>         128 |  test
>         256 |  test
>       65535 |  test
>       65536 |  test
>    16777215 |  test
>    16777216 |  test
>  2147483647 |  test
>
> (8 rows)
> cqlsh> alter table foo alter id TYPE varint;
> cqlsh> select * from foo where id in (1, 128, 256, 65535, 65536, 16777215,
> 16777216, 2147483647);
>
>  id         | value
> ------------+-------
>    16777215 |  test
>    16777216 |  test
>  2147483647 |  test
>
> (3 rows)
> cqlsh> select * from foo;
>
>  id         | value
> ------------+-------
>         128 |  test
>    16777216 |  test
>           1 |  test
>  2147483647 |  test
>    16777215 |  test
>         256 |  test
>       65535 |  test
>       65536 |  test
>
>
>
>
> On Wed, Jan 11, 2017 at 9:54 AM, Benjamin Roth <benjamin.r...@jaumo.com>
> wrote:
>
>> Few! You saved my life, thanks!
>>
>> For my understanding:
>> When creating a new table, is bigint or varint a better choice for
>> storing (up to) 64bit ints? Is there a difference in performance?
>>
>> 2017-01-11 9:39 GMT+01:00 Tom van der Woerdt <
>> tom.vanderwoe...@booking.com>:
>>
>>> Hi Benjamin,
>>>
>>> bigint and int have incompatible serialization types, so that won't
>>> work. However, changing to 'varint' will work fine.
>>>
>>> Hope that helps.
>>>
>>> Tom
>>>
>>>
>>>
>>> On Wed, Jan 11, 2017 at 9:21 AM, Benjamin Roth <benjamin.r...@jaumo.com>
>>> wrote:
>>>
>>>> Hi there,
>>>>
>>>> Does anyone know if there is a hack to change a "int" to a "bigint" in
>>>> a primary key?
>>>> I recognized very late, I took the wrong type and our production DB
>>>> already contains billions of records :(
>>>> Is there maybe a hack for it, because int and bigint are similar types
>>>> or does the SSTable serialization and maybe the token generation require
>>>> the tables to be completely reread+rewritten?
>>>>
>>>> --
>>>> Benjamin Roth
>>>> Prokurist
>>>>
>>>> Jaumo GmbH · www.jaumo.com
>>>> Wehrstraße 46 · 73035 Göppingen · Germany
>>>> Phone +49 7161 304880-6 <+49%207161%203048806> · Fax +49 7161 304880-1
>>>> <+49%207161%203048801>
>>>> AG Ulm · HRB 731058 · Managing Director: Jens Kammerer
>>>>
>>>
>>>
>>
>>
>> --
>> Benjamin Roth
>> Prokurist
>>
>> Jaumo GmbH · www.jaumo.com
>> Wehrstraße 46 · 73035 Göppingen · Germany
>> Phone +49 7161 304880-6 <+49%207161%203048806> · Fax +49 7161 304880-1
>> <+49%207161%203048801>
>> AG Ulm · HRB 731058 · Managing Director: Jens Kammerer
>>
>
>


-- 
Benjamin Roth
Prokurist

Jaumo GmbH · www.jaumo.com
Wehrstraße 46 · 73035 Göppingen · Germany
Phone +49 7161 304880-6 · Fax +49 7161 304880-1
AG Ulm · HRB 731058 · Managing Director: Jens Kammerer

Reply via email to