Re: How to do cache.get() on SQL table by primary key with multiple columns?
Well it's more because I have to inject the ignite instance into my cache "repository" which abstracts away the IgniteCache only. And if the builder is not an expensive operation I guess I can find a way to pass the ignite instance down into the cache repo implementation. On Wed, 15 Jul 2020 at 17:45, Evgenii Zhuravlev wrote: > John, > > Then you should just get a new builder every time when you need it: > myIgniteInstance.binary().builder("MyKey"). I don't see why you need to > reuse builder from multiple threads here. > > Evgenii > > ср, 15 июл. 2020 г. в 14:34, John Smith : > >> I'm using it in Vertx.io. if you understand the concept a bit. I have 2 >> vertices. >> >> I create 2 instances of BinaryObjectBuilder >> >> Each builder creates a new object (binary key) per "event" that comes in. >> >> So if I get 2 events then each builder will build one... >> >> If I get 3 events, the 3rd event will wait until one of the event loops >> can process the next event... >> >> >> >> On Wed., Jul. 15, 2020, 3:43 p.m. Evgenii Zhuravlev, < >> e.zhuravlev...@gmail.com> wrote: >> >>> 1. This builder can be used for making one object, do you want to >>> construct one object from multiple threads? >>> 2. No, you still can work with BinaryObjects instead of actual classes. >>> >>> Evgenii >>> >>> ср, 15 июл. 2020 г. в 08:50, John Smith : >>> Hi Evgenii, it works good. I have two questions... 1- Is the BinaryObjectBuilder obtained from myIgniteInstance.binary().builder("MyKey"); thread safe? Can I pass the same builder to multiple instances of my cache "repository" wrapper I wrote? 2- If we want to use the actual MyKey class then I suppose that needs to be in the classpath on all nodes? On Wed, 15 Jul 2020 at 10:43, John Smith wrote: > Ok I will try it... > > On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev < > e.zhuravlev...@gmail.com> wrote: > >> John, >> >> It's not necessary to have class at all, you can specify any type, >> you just need to use this type when creating binary object for this key. >> >> вт, 14 июл. 2020 г. в 17:50, John Smith : >> >>> I just used two columns as primary key... >>> >>> Of I use key_type and specify a type does that class need to exist >>> in the class path of the server nodes? >>> >>> Like if I have >>> >>> class MyKeyClass { >>>Integer col1; >>>Integer col2; >>> } >>> >>> Does this class need to be loaded in all nodes or ignite can figure >>> it out and marshal it? >>> >>> On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < >>> e.zhuravlev...@gmail.com> wrote: >>> Hi John, To do this, you need to create a key object with the same type as you have for the table. If you don't specify KEY_TYPE in the create table script, it will be generated automatically. I would recommend to specify it for the command(just type name, if you don't have a class) and, when you need to get data using key-value API, just create a binary object of this type with these fields: https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects Evgenii вт, 14 июл. 2020 г. в 07:18, John Smith : > Hi, I have an SQL table > > create table if not exists my_table ( > column1 int, > column2 int, > column3 varchar(16), > PRIMARY KEY (column1, column2) > ) with "template=replicatedTpl"; > > and I'm creating my near cache as follows... > > IgniteCache myCache; > > NearCacheConfiguration nearConfig = new > NearCacheConfiguration<>(); > nearConfig.setNearEvictionPolicyFactory(new > LruEvictionPolicyFactory<>(1024)); > > myCache = > this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) > .withExpiryPolicy(new AccessedExpiryPolicy(new > Duration(TimeUnit.HOURS, 1))); > > So if I use myCache.get()... > > 1- How do I specify the primary key if it's 2 columns? > 2- I assume the data will be put in near cache? > > > > >
Re: How to do cache.get() on SQL table by primary key with multiple columns?
John, Then you should just get a new builder every time when you need it: myIgniteInstance.binary().builder("MyKey"). I don't see why you need to reuse builder from multiple threads here. Evgenii ср, 15 июл. 2020 г. в 14:34, John Smith : > I'm using it in Vertx.io. if you understand the concept a bit. I have 2 > vertices. > > I create 2 instances of BinaryObjectBuilder > > Each builder creates a new object (binary key) per "event" that comes in. > > So if I get 2 events then each builder will build one... > > If I get 3 events, the 3rd event will wait until one of the event loops > can process the next event... > > > > On Wed., Jul. 15, 2020, 3:43 p.m. Evgenii Zhuravlev, < > e.zhuravlev...@gmail.com> wrote: > >> 1. This builder can be used for making one object, do you want to >> construct one object from multiple threads? >> 2. No, you still can work with BinaryObjects instead of actual classes. >> >> Evgenii >> >> ср, 15 июл. 2020 г. в 08:50, John Smith : >> >>> Hi Evgenii, it works good. I have two questions... >>> >>> 1- Is the BinaryObjectBuilder obtained from >>> myIgniteInstance.binary().builder("MyKey"); thread safe? Can I pass the >>> same builder to multiple instances of my cache "repository" wrapper I wrote? >>> 2- If we want to use the actual MyKey class then I suppose that needs to >>> be in the classpath on all nodes? >>> >>> On Wed, 15 Jul 2020 at 10:43, John Smith wrote: >>> Ok I will try it... On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev < e.zhuravlev...@gmail.com> wrote: > John, > > It's not necessary to have class at all, you can specify any type, you > just need to use this type when creating binary object for this key. > > вт, 14 июл. 2020 г. в 17:50, John Smith : > >> I just used two columns as primary key... >> >> Of I use key_type and specify a type does that class need to exist in >> the class path of the server nodes? >> >> Like if I have >> >> class MyKeyClass { >>Integer col1; >>Integer col2; >> } >> >> Does this class need to be loaded in all nodes or ignite can figure >> it out and marshal it? >> >> On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < >> e.zhuravlev...@gmail.com> wrote: >> >>> Hi John, >>> >>> To do this, you need to create a key object with the same type as >>> you have for the table. If you don't specify KEY_TYPE in the create >>> table >>> script, it will be generated automatically. I would recommend to >>> specify it >>> for the command(just type name, if you don't have a class) and, when you >>> need to get data using key-value API, just create a binary object of >>> this >>> type with these fields: >>> https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects >>> >>> Evgenii >>> >>> вт, 14 июл. 2020 г. в 07:18, John Smith : >>> Hi, I have an SQL table create table if not exists my_table ( column1 int, column2 int, column3 varchar(16), PRIMARY KEY (column1, column2) ) with "template=replicatedTpl"; and I'm creating my near cache as follows... IgniteCache myCache; NearCacheConfiguration nearConfig = new NearCacheConfiguration<>(); nearConfig.setNearEvictionPolicyFactory(new LruEvictionPolicyFactory<>(1024)); myCache = this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, 1))); So if I use myCache.get()... 1- How do I specify the primary key if it's 2 columns? 2- I assume the data will be put in near cache?
Re: How to do cache.get() on SQL table by primary key with multiple columns?
I'm using it in Vertx.io. if you understand the concept a bit. I have 2 vertices. I create 2 instances of BinaryObjectBuilder Each builder creates a new object (binary key) per "event" that comes in. So if I get 2 events then each builder will build one... If I get 3 events, the 3rd event will wait until one of the event loops can process the next event... On Wed., Jul. 15, 2020, 3:43 p.m. Evgenii Zhuravlev, < e.zhuravlev...@gmail.com> wrote: > 1. This builder can be used for making one object, do you want to > construct one object from multiple threads? > 2. No, you still can work with BinaryObjects instead of actual classes. > > Evgenii > > ср, 15 июл. 2020 г. в 08:50, John Smith : > >> Hi Evgenii, it works good. I have two questions... >> >> 1- Is the BinaryObjectBuilder obtained from >> myIgniteInstance.binary().builder("MyKey"); thread safe? Can I pass the >> same builder to multiple instances of my cache "repository" wrapper I wrote? >> 2- If we want to use the actual MyKey class then I suppose that needs to >> be in the classpath on all nodes? >> >> On Wed, 15 Jul 2020 at 10:43, John Smith wrote: >> >>> Ok I will try it... >>> >>> On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev < >>> e.zhuravlev...@gmail.com> wrote: >>> John, It's not necessary to have class at all, you can specify any type, you just need to use this type when creating binary object for this key. вт, 14 июл. 2020 г. в 17:50, John Smith : > I just used two columns as primary key... > > Of I use key_type and specify a type does that class need to exist in > the class path of the server nodes? > > Like if I have > > class MyKeyClass { >Integer col1; >Integer col2; > } > > Does this class need to be loaded in all nodes or ignite can figure it > out and marshal it? > > On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < > e.zhuravlev...@gmail.com> wrote: > >> Hi John, >> >> To do this, you need to create a key object with the same type as you >> have for the table. If you don't specify KEY_TYPE in the create table >> script, it will be generated automatically. I would recommend to specify >> it >> for the command(just type name, if you don't have a class) and, when you >> need to get data using key-value API, just create a binary object of this >> type with these fields: >> https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects >> >> Evgenii >> >> вт, 14 июл. 2020 г. в 07:18, John Smith : >> >>> Hi, I have an SQL table >>> >>> create table if not exists my_table ( >>> column1 int, >>> column2 int, >>> column3 varchar(16), >>> PRIMARY KEY (column1, column2) >>> ) with "template=replicatedTpl"; >>> >>> and I'm creating my near cache as follows... >>> >>> IgniteCache myCache; >>> >>> NearCacheConfiguration nearConfig = new >>> NearCacheConfiguration<>(); >>> nearConfig.setNearEvictionPolicyFactory(new >>> LruEvictionPolicyFactory<>(1024)); >>> >>> myCache = >>> this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) >>> .withExpiryPolicy(new AccessedExpiryPolicy(new >>> Duration(TimeUnit.HOURS, 1))); >>> >>> So if I use myCache.get()... >>> >>> 1- How do I specify the primary key if it's 2 columns? >>> 2- I assume the data will be put in near cache? >>> >>> >>> >>> >>>
Re: How to do cache.get() on SQL table by primary key with multiple columns?
1. This builder can be used for making one object, do you want to construct one object from multiple threads? 2. No, you still can work with BinaryObjects instead of actual classes. Evgenii ср, 15 июл. 2020 г. в 08:50, John Smith : > Hi Evgenii, it works good. I have two questions... > > 1- Is the BinaryObjectBuilder obtained from > myIgniteInstance.binary().builder("MyKey"); thread safe? Can I pass the > same builder to multiple instances of my cache "repository" wrapper I wrote? > 2- If we want to use the actual MyKey class then I suppose that needs to > be in the classpath on all nodes? > > On Wed, 15 Jul 2020 at 10:43, John Smith wrote: > >> Ok I will try it... >> >> On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev >> wrote: >> >>> John, >>> >>> It's not necessary to have class at all, you can specify any type, you >>> just need to use this type when creating binary object for this key. >>> >>> вт, 14 июл. 2020 г. в 17:50, John Smith : >>> I just used two columns as primary key... Of I use key_type and specify a type does that class need to exist in the class path of the server nodes? Like if I have class MyKeyClass { Integer col1; Integer col2; } Does this class need to be loaded in all nodes or ignite can figure it out and marshal it? On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < e.zhuravlev...@gmail.com> wrote: > Hi John, > > To do this, you need to create a key object with the same type as you > have for the table. If you don't specify KEY_TYPE in the create table > script, it will be generated automatically. I would recommend to specify > it > for the command(just type name, if you don't have a class) and, when you > need to get data using key-value API, just create a binary object of this > type with these fields: > https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects > > Evgenii > > вт, 14 июл. 2020 г. в 07:18, John Smith : > >> Hi, I have an SQL table >> >> create table if not exists my_table ( >> column1 int, >> column2 int, >> column3 varchar(16), >> PRIMARY KEY (column1, column2) >> ) with "template=replicatedTpl"; >> >> and I'm creating my near cache as follows... >> >> IgniteCache myCache; >> >> NearCacheConfiguration nearConfig = new >> NearCacheConfiguration<>(); >> nearConfig.setNearEvictionPolicyFactory(new >> LruEvictionPolicyFactory<>(1024)); >> >> myCache = >> this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) >> .withExpiryPolicy(new AccessedExpiryPolicy(new >> Duration(TimeUnit.HOURS, 1))); >> >> So if I use myCache.get()... >> >> 1- How do I specify the primary key if it's 2 columns? >> 2- I assume the data will be put in near cache? >> >> >> >> >>
Re: How to do cache.get() on SQL table by primary key with multiple columns?
Hi Evgenii, it works good. I have two questions... 1- Is the BinaryObjectBuilder obtained from myIgniteInstance.binary().builder("MyKey"); thread safe? Can I pass the same builder to multiple instances of my cache "repository" wrapper I wrote? 2- If we want to use the actual MyKey class then I suppose that needs to be in the classpath on all nodes? On Wed, 15 Jul 2020 at 10:43, John Smith wrote: > Ok I will try it... > > On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev > wrote: > >> John, >> >> It's not necessary to have class at all, you can specify any type, you >> just need to use this type when creating binary object for this key. >> >> вт, 14 июл. 2020 г. в 17:50, John Smith : >> >>> I just used two columns as primary key... >>> >>> Of I use key_type and specify a type does that class need to exist in >>> the class path of the server nodes? >>> >>> Like if I have >>> >>> class MyKeyClass { >>>Integer col1; >>>Integer col2; >>> } >>> >>> Does this class need to be loaded in all nodes or ignite can figure it >>> out and marshal it? >>> >>> On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < >>> e.zhuravlev...@gmail.com> wrote: >>> Hi John, To do this, you need to create a key object with the same type as you have for the table. If you don't specify KEY_TYPE in the create table script, it will be generated automatically. I would recommend to specify it for the command(just type name, if you don't have a class) and, when you need to get data using key-value API, just create a binary object of this type with these fields: https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects Evgenii вт, 14 июл. 2020 г. в 07:18, John Smith : > Hi, I have an SQL table > > create table if not exists my_table ( > column1 int, > column2 int, > column3 varchar(16), > PRIMARY KEY (column1, column2) > ) with "template=replicatedTpl"; > > and I'm creating my near cache as follows... > > IgniteCache myCache; > > NearCacheConfiguration nearConfig = new > NearCacheConfiguration<>(); > nearConfig.setNearEvictionPolicyFactory(new > LruEvictionPolicyFactory<>(1024)); > > myCache = > this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) > .withExpiryPolicy(new AccessedExpiryPolicy(new > Duration(TimeUnit.HOURS, 1))); > > So if I use myCache.get()... > > 1- How do I specify the primary key if it's 2 columns? > 2- I assume the data will be put in near cache? > > > > >
Re: How to do cache.get() on SQL table by primary key with multiple columns?
Ok I will try it... On Tue, 14 Jul 2020 at 22:34, Evgenii Zhuravlev wrote: > John, > > It's not necessary to have class at all, you can specify any type, you > just need to use this type when creating binary object for this key. > > вт, 14 июл. 2020 г. в 17:50, John Smith : > >> I just used two columns as primary key... >> >> Of I use key_type and specify a type does that class need to exist in the >> class path of the server nodes? >> >> Like if I have >> >> class MyKeyClass { >>Integer col1; >>Integer col2; >> } >> >> Does this class need to be loaded in all nodes or ignite can figure it >> out and marshal it? >> >> On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < >> e.zhuravlev...@gmail.com> wrote: >> >>> Hi John, >>> >>> To do this, you need to create a key object with the same type as you >>> have for the table. If you don't specify KEY_TYPE in the create table >>> script, it will be generated automatically. I would recommend to specify it >>> for the command(just type name, if you don't have a class) and, when you >>> need to get data using key-value API, just create a binary object of this >>> type with these fields: >>> https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects >>> >>> Evgenii >>> >>> вт, 14 июл. 2020 г. в 07:18, John Smith : >>> Hi, I have an SQL table create table if not exists my_table ( column1 int, column2 int, column3 varchar(16), PRIMARY KEY (column1, column2) ) with "template=replicatedTpl"; and I'm creating my near cache as follows... IgniteCache myCache; NearCacheConfiguration nearConfig = new NearCacheConfiguration<>(); nearConfig.setNearEvictionPolicyFactory(new LruEvictionPolicyFactory<>(1024)); myCache = this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, 1))); So if I use myCache.get()... 1- How do I specify the primary key if it's 2 columns? 2- I assume the data will be put in near cache?
Re: How to do cache.get() on SQL table by primary key with multiple columns?
John, It's not necessary to have class at all, you can specify any type, you just need to use this type when creating binary object for this key. вт, 14 июл. 2020 г. в 17:50, John Smith : > I just used two columns as primary key... > > Of I use key_type and specify a type does that class need to exist in the > class path of the server nodes? > > Like if I have > > class MyKeyClass { >Integer col1; >Integer col2; > } > > Does this class need to be loaded in all nodes or ignite can figure it out > and marshal it? > > On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < > e.zhuravlev...@gmail.com> wrote: > >> Hi John, >> >> To do this, you need to create a key object with the same type as you >> have for the table. If you don't specify KEY_TYPE in the create table >> script, it will be generated automatically. I would recommend to specify it >> for the command(just type name, if you don't have a class) and, when you >> need to get data using key-value API, just create a binary object of this >> type with these fields: >> https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects >> >> Evgenii >> >> вт, 14 июл. 2020 г. в 07:18, John Smith : >> >>> Hi, I have an SQL table >>> >>> create table if not exists my_table ( >>> column1 int, >>> column2 int, >>> column3 varchar(16), >>> PRIMARY KEY (column1, column2) >>> ) with "template=replicatedTpl"; >>> >>> and I'm creating my near cache as follows... >>> >>> IgniteCache myCache; >>> >>> NearCacheConfiguration nearConfig = new >>> NearCacheConfiguration<>(); >>> nearConfig.setNearEvictionPolicyFactory(new >>> LruEvictionPolicyFactory<>(1024)); >>> >>> myCache = >>> this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) >>> .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, >>> 1))); >>> >>> So if I use myCache.get()... >>> >>> 1- How do I specify the primary key if it's 2 columns? >>> 2- I assume the data will be put in near cache? >>> >>> >>> >>> >>>
Re: How to do cache.get() on SQL table by primary key with multiple columns?
I just used two columns as primary key... Of I use key_type and specify a type does that class need to exist in the class path of the server nodes? Like if I have class MyKeyClass { Integer col1; Integer col2; } Does this class need to be loaded in all nodes or ignite can figure it out and marshal it? On Tue., Jul. 14, 2020, 6:50 p.m. Evgenii Zhuravlev, < e.zhuravlev...@gmail.com> wrote: > Hi John, > > To do this, you need to create a key object with the same type as you have > for the table. If you don't specify KEY_TYPE in the create table script, it > will be generated automatically. I would recommend to specify it for the > command(just type name, if you don't have a class) and, when you need to > get data using key-value API, just create a binary object of this type with > these fields: > https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects > > Evgenii > > вт, 14 июл. 2020 г. в 07:18, John Smith : > >> Hi, I have an SQL table >> >> create table if not exists my_table ( >> column1 int, >> column2 int, >> column3 varchar(16), >> PRIMARY KEY (column1, column2) >> ) with "template=replicatedTpl"; >> >> and I'm creating my near cache as follows... >> >> IgniteCache myCache; >> >> NearCacheConfiguration nearConfig = new >> NearCacheConfiguration<>(); >> nearConfig.setNearEvictionPolicyFactory(new >> LruEvictionPolicyFactory<>(1024)); >> >> myCache = >> this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) >> .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, >> 1))); >> >> So if I use myCache.get()... >> >> 1- How do I specify the primary key if it's 2 columns? >> 2- I assume the data will be put in near cache? >> >> >> >> >>
Re: How to do cache.get() on SQL table by primary key with multiple columns?
Hi John, To do this, you need to create a key object with the same type as you have for the table. If you don't specify KEY_TYPE in the create table script, it will be generated automatically. I would recommend to specify it for the command(just type name, if you don't have a class) and, when you need to get data using key-value API, just create a binary object of this type with these fields: https://www.gridgain.com/docs/latest/developers-guide/key-value-api/binary-objects#creating-and-modifying-binary-objects Evgenii вт, 14 июл. 2020 г. в 07:18, John Smith : > Hi, I have an SQL table > > create table if not exists my_table ( > column1 int, > column2 int, > column3 varchar(16), > PRIMARY KEY (column1, column2) > ) with "template=replicatedTpl"; > > and I'm creating my near cache as follows... > > IgniteCache myCache; > > NearCacheConfiguration nearConfig = new > NearCacheConfiguration<>(); > nearConfig.setNearEvictionPolicyFactory(new > LruEvictionPolicyFactory<>(1024)); > > myCache = > this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) > .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, > 1))); > > So if I use myCache.get()... > > 1- How do I specify the primary key if it's 2 columns? > 2- I assume the data will be put in near cache? > > > > >
How to do cache.get() on SQL table by primary key with multiple columns?
Hi, I have an SQL table create table if not exists my_table ( column1 int, column2 int, column3 varchar(16), PRIMARY KEY (column1, column2) ) with "template=replicatedTpl"; and I'm creating my near cache as follows... IgniteCache myCache; NearCacheConfiguration nearConfig = new NearCacheConfiguration<>(); nearConfig.setNearEvictionPolicyFactory(new LruEvictionPolicyFactory<>(1024)); myCache = this.ignite.getOrCreateNearCache(SQL_PUBLIC_MY_TABLE, nearConfig) .withExpiryPolicy(new AccessedExpiryPolicy(new Duration(TimeUnit.HOURS, 1))); So if I use myCache.get()... 1- How do I specify the primary key if it's 2 columns? 2- I assume the data will be put in near cache?