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 >