Yes, that’s right.

On Thursday, June 18, 2020, narges saleh <snarges...@gmail.com> wrote:

> Hi Denis
> But if all the involved tables/caches have the same affinity key,
> shouldn't they be collocated on the same node, if the data fits on that
> node?
> thanks.
>
> On Wed, Jun 17, 2020 at 10:53 PM Denis Magda <dma...@apache.org> wrote:
>
>> You can always send a compute task via one of IgniteCompute.affinityX()
>> methods and run a *local* SQL query on that node:
>>
>>    - affinity calls: https://apacheignite.readme.io/docs/collocate-
>>    compute-and-data#affinity-call-and-run-methods
>>    
>> <https://apacheignite.readme.io/docs/collocate-compute-and-data#affinity-call-and-run-methods>
>>    - local SQL queries: https://apacheignite-sql.readme.io/docs/local-
>>    queries
>>
>> My selects are complex but they do use the primary keys for the
>>> partitioned tables/caches participating in the query. But they perform
>>> poorly if the data is distributed across multiple nodes.
>>
>>
>> If the data is co-located and scattered across cluster nodes then it's
>> expected that Ignite will execute a query across several nodes. It's a
>> standard approach of distributed databases that support SQL engines. My
>> suggestion would be to investigate the root cause of low performance. You
>> just might need to configure some indexes: https://apacheignite-sql.
>> readme.io/docs/performance-and-debugging
>>
>> -
>> Denis
>>
>>
>> On Wed, Jun 17, 2020 at 7:33 PM narges saleh <snarges...@gmail.com>
>> wrote:
>>
>>> My selects are complex but they do use the primary keys for the
>>> partitioned tables/caches participating in the query. But they perform
>>> poorly if the data is distributed across multiple nodes.
>>>
>>> On Wed, Jun 17, 2020 at 8:04 PM narges saleh <snarges...@gmail.com>
>>> wrote:
>>>
>>>> Thanks Denis. In case of selects, can I push ignite to broadcast the
>>>> sql to where the data is, say by using employing services deployed on the
>>>> targeted data nodes, or utilizing affinity calls (with the sql as part of
>>>> the logic)?
>>>>
>>>> On Wed, Jun 17, 2020 at 7:02 PM Denis Magda <dma...@apache.org> wrote:
>>>>
>>>>> Narges,
>>>>>
>>>>> INSERTS/UPDATES/DELETES will be forwarded to primary nodes based on
>>>>> the value of primary keys you pass into queries. Ignite maps a primary key
>>>>> to a partition and, finally, to a primary node that holds that partition.
>>>>> All this happens transparently in Ignite. You don't need to do anything
>>>>> except for sending those SQL commands.
>>>>>
>>>>> As for SELECTS, most of them will be broadcasted to your server nodes
>>>>> unless Ignite can pre-select a sub-set of target nodes a query needs to be
>>>>> executed on. This optimization always takes place for simple queries when
>>>>> you try to get records based on the value of a primary key, such as 
>>>>> "SELECT
>>>>> * FROM Table WHERE primaryKeyColumn = 2".
>>>>>
>>>>> -
>>>>> Denis
>>>>>
>>>>>
>>>>> On Wed, Jun 17, 2020 at 12:43 PM narges saleh <snarges...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thanks Denis. Will watch the video.
>>>>>> One more question, related to SQL execution. If I issue a SQL from a
>>>>>> client, how would ignite know which node to run the SQL query on? I 
>>>>>> assume
>>>>>> the SQL is parsed on the server nodes, and I will still need to direct 
>>>>>> the
>>>>>> SQL to be executed on the right server node (assuming that all the data 
>>>>>> is
>>>>>> collocated on a single node). Am I right?
>>>>>>
>>>>>> On Wed, Jun 17, 2020 at 2:26 PM Denis Magda <dma...@apache.org>
>>>>>> wrote:
>>>>>>
>>>>>>> The collocated flag is an extra optimization hint for SQL queries
>>>>>>> with GROUP BYs. The parameter requests to group records locally on the
>>>>>>> nodes that participated in the query execution. For instance, if your
>>>>>>> application sends a query with GROUP BY to a couple of server nodes, 
>>>>>>> then
>>>>>>> the nodes will group their portions of the result sets locally not 
>>>>>>> making
>>>>>>> that the burden of the application that merges/reduces the result sets 
>>>>>>> into
>>>>>>> one. The description of this parameter here should be helpful as well:
>>>>>>> https://apacheignite-sql.readme.io/docs/jdbc-driver#parameters
>>>>>>>
>>>>>>> <https://apacheignite-sql.readme.io/docs/jdbc-driver#parameters>
>>>>>>>>
>>>>>>>> Should I assume that if the table is defined with affinity set,
>>>>>>>> then compute collocation, including sql execution will happen 
>>>>>>>> automatically?
>>>>>>>
>>>>>>>
>>>>>>> That's right. You just need to set up the affinity keys and Ignite
>>>>>>> will take care of the rest. Btw, you might be interested in this SQL
>>>>>>> webinar we delivered recently. The webinar explains our SQL 
>>>>>>> capabilities in
>>>>>>> detail: https://www.youtube.com/watch?v=eYV-tNLzIts
>>>>>>>
>>>>>>> -
>>>>>>> Denis
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Jun 17, 2020 at 11:28 AM narges saleh <snarges...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Then can you please explain what the option collocated=true for
>>>>>>>> JDBC url is for?
>>>>>>>> Should I assume that if the table is defined with affinity set,
>>>>>>>> then compute collocation, including sql execution will happen 
>>>>>>>> automatically?
>>>>>>>> I am sorry if this is just a basic question.
>>>>>>>>
>>>>>>>> On Wed, Jun 17, 2020 at 12:57 PM Denis Magda <dma...@apache.org>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> If the data is already co-located you don't need to pass in any
>>>>>>>>> other parameters.
>>>>>>>>>
>>>>>>>>> -
>>>>>>>>> Denis
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Jun 17, 2020 at 10:13 AM narges saleh <
>>>>>>>>> snarges...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Denis. The tables are defined with affinity keys specified.
>>>>>>>>>> What I am asking whether to set the collection option when I insert 
>>>>>>>>>> or
>>>>>>>>>> query the data via SQL line.
>>>>>>>>>>
>>>>>>>>>> thanks
>>>>>>>>>>
>>>>>>>>>> On Wed, Jun 17, 2020 at 11:39 AM Denis Magda <dma...@apache.org>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> You need to pass the required parameters to the JDBC driver's
>>>>>>>>>>> connection URL:
>>>>>>>>>>> https://apacheignite-sql.readme.io/docs/jdbc-driver#parameters
>>>>>>>>>>>
>>>>>>>>>>> However, I'm not quite sure what you mean under the
>>>>>>>>>>> "collocation" in the following context. All your data needs to be
>>>>>>>>>>> co-located beforehand (ensure you have affinity keys configured) 
>>>>>>>>>>> and then
>>>>>>>>>>> just send your queries with joins with no additional connection 
>>>>>>>>>>> parameters.
>>>>>>>>>>>
>>>>>>>>>>> -
>>>>>>>>>>> Denis
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Jun 17, 2020 at 9:33 AM narges saleh <
>>>>>>>>>>> snarges...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>
>>>>>>>>>>>> Is collocation enforced when SQL is issues in sqline command
>>>>>>>>>>>> line or do I need to give the option when I start sqlline?
>>>>>>>>>>>>
>>>>>>>>>>>> thanks.
>>>>>>>>>>>>
>>>>>>>>>>>

-- 
-
Denis

Reply via email to