Dear Vladimir, Thanks for your answer.
Now I understand the difference between ‘client’ and ‘thin client’. Just to be clear I develop ‘thin client’ for DataGrid now: https://github.com/amsokol/go-ignite-client and all my questions are in context of ‘thin client’. So the questions are: 1) Does EdgeNode provide binary endpoint that supports cache management, put-get, sql exec queries, fetch, transactions and I can use it by ‘thin’ golang client? 2) If the answer to the question (1) is ‘NO’ – is it possible to add transactions to ODBC endpoint? 3) If the answer to the question (2) is ‘NO’ – is it possible to add transactions to REST API? Thanks, Aleksandr From: Vladimir Ozerov Sent: 30 июня 2017 г. 8:18 To: dev@ignite.apache.org Cc: Roman Shtykh Subject: Re: golang client for Ignite Aleksandr, Currently Ignite.NET and Ignite C++ work as follows: >>> Client[platform->*jni->java*]->network->Server[java] Or as follows in some cases (e.g. calling remote .NET job from local .NET node): >>> Client[platform->*jni->java*]->network->Server[java->*jni->platform*] Possible thin client will work as follows (ODBC driver already works this way): >>> Client[platform]->*network*->EdgeNode[java]->network->Server[java] Note additional network hop from client to edge node because thin client lacks routing logic. On Fri, Jun 30, 2017 at 12:38 AM, Aleksandr Sokolovskii <amso...@gmail.com> wrote: > Dear Vladimir, > > Thanks for your answer. > > I’m a little bit confused. > > You write: > We have a plan to implement platform-independent thin client protocol which > could be re-used from many languages. But you should understand, that in > most cases it will be *slower* than current implementation, because Java > core contains essential logic for efficient request routing. > > Current C++ realization in Ignite now: > Client[cpp]->network->Server[cpp->java] > > If you recommend use “Java core contains essential logic for efficient > request routing” why you don’t implement the following for C++?: > Client[cpp->java]->network->Server[java] > > > Why platform-independent protocol: > Client[cpp->]->network->Server[java] > > Will be slow than current?: > Client[cpp]->network->Server[cpp->java] > > Thanks, > Aleksandr > > From: Vladimir Ozerov > Sent: 30 июня 2017 г. 0:25 > To: dev@ignite.apache.org > Cc: Roman Shtykh > Subject: Re: golang client for Ignite > > Aleksandr, > > Ignite is distributed system. Typical call to get/put/sql is of micro- and > millisecond magnitude. Java->CPP call takes several dozen nanoseconds. > CPP->Java (so-called "reverse JNI") takes several hundred nanoseconds. > Typical marshalling overhead is of nano- and micro-second scale as well. > That is, total overhead of platform->Java->platform interaction is several > orders of magnitude *smaller* than any call to remote node. So if Golang > users are afraid of JNI, than any distributed system would scare them to > death. > > We have a plan to implement platform-independent thin client protocol which > could be re-used from many languages. But you should understand, that in > most cases it will be *slower* than current implementation, because Java > core contains essential logic for efficient request routing. Native thin > client could be faster only if you port many and many thousands of relevant > non-trivial Java code to native platform, which can be estimated not to > man-months, but to man-years to complete. > > Having said that, I would recommend you to look closer to current JNI-based > implementation :-) > > > On Thu, Jun 29, 2017 at 9:11 AM, Aleksandr Sokolovskii <amso...@gmail.com> > wrote: > > > Guys, > > > > Thanks for your answers. > > > > So If users want to use Ignite DataGrid from “unsupported” language they > > have two choice for now: > > > > 1) REST API > > It supports: cache management, put-get, sql exec queries, fetch > > It does not support: sql transactions > > REST API is easy to use. > > REST API has a lot of overhead (HTTP, json marshalling/unmarshalling,.. > > you know) > > > > 2) develop pure SQL driver for Ignite ODBC endpoint > > It supports: sql exec queries, fetch > > It does not support: cache management, put-get, sql transactions > > Roman is right – using cgo is not very good idea. > > Honestly It’s not trivial task to develop pure SQL driver for Ignite ODBC > > endpoint. > > I spent some hours to remember how STL serializes std::string to > > unmarshall it in golang. ))) > > My last C++ experience was in 2004. ))) > > Another my concern is C++ wrapper over Ignite Java process. > > I try to explain: > > The main reason to develop something using golang is performance. > > People how use golang are enslaved by performance. > > They think how to avoid unnecessary memory allocation, avoid reflection, > > etc. > > Go provides goroutine instead of system threads to avoid memory > allocation > > and cross-threads switching. > > Cross-process switching (cpp->jvm->cpp) on server side of in-memory > > database looks like “shot yourself in foot” for such people. ))) > > > > There is another way: to implement native client for H2 DB protocol. > > (If I’m not mistaken Ignite use H2 DB protocol for JDBC endpoint). > > Again it’s not trivial task to implement pure native H2 DB client for > each > > necessary programming language. > > > > What do you think about to implement gRPC (or Apache Thrift, or…) > > platform-language-neutral protocol endpoint in Java core of Ignite? > > I resolves “unsupported” language client problem. > > > > Thanks, > > Aleksandr > > > > From: Roman Shtykh > > Sent: 29 июня 2017 г. 6:36 > > To: dev@ignite.apache.org > > Subject: Re: golang client for Ignite > > > > Guys, > > > > Just an observation, but when I introduce Ignite to other developers, > they > > get very interested. But when the question goes to the support of the > > language they use for development, often they look disappointed because a > > chunk of functionalities I introduce becomes inaccessible. I think from > > their NoSQL experience they expect a client protocol. > > As for Golang, from what I know, you have to write bindings in C for C++ > > and use them. There are performance concerns with cgo. > > -- Roman > > > > > > On Thursday, June 29, 2017 9:34 AM, Dmitriy Setrakyan < > > dsetrak...@apache.org> wrote: > > > > > > Denis, > > > > Perhaps adding the same level of support for Golang as we have for .NET > or > > C++ would be asking too much. The reason we start a JVM in .NET and C++ > is > > because we implemented the full Ignite API support, even including > > transactions and executing .NET closures on remote Java servers. > > > > Perhaps, from Golang client standpoint, it is enough to implement it > > directly over the REST protocol initially. > > > > D. > > > > On Wed, Jun 28, 2017 at 3:59 PM, Denis Magda <dma...@apache.org> wrote: > > > > > Aleksandr, > > > > > > > I take a look into ignite cpp core. > > > > Looks like it attaches to running jvm and calls java methods. > > > > Please tell me that I’m wrong! ))) > > > > > > That’s a correct observation. Both C++ and .NET clients spawn a JVM > > > process underneath and redirect almost all the requests to it. That > > > approach allowed us to support these languages easily. Otherwise, it > > would > > > have taken ages to develop true C++ and .NET libs. > > > > > > > It will not work for golang. > > > > > > Why? > > > > > > > Is there language-neutral protocol to communicate with Ignite server? > > > > > > REST, ODBC and JDBC only. > > > > > > — > > > Denis > > > > > > > > > > On Jun 28, 2017, at 12:43 PM, Aleksandr Sokolovskii < > amso...@gmail.com > > > > > > wrote: > > > > > > > > Denis, > > > > > > > > I take a look into ignite cpp core. > > > > Looks like it attaches to running jvm and calls java methods. > > > > Please tell me that I’m wrong! ))) > > > > > > > > It will not work for golang. > > > > Is there language-neutral protocol to communicate with Ignite server? > > > > > > > > Thanks, > > > > Aleksandr > > > > > > > > From: Aleksandr Sokolovskii > > > > Sent: 28 июня 2017 г. 22:26 > > > > To: dev@ignite.apache.org > > > > Subject: RE: golang client for Ignite > > > > > > > > Hi Deins, > > > > > > > > Thanks for answer. > > > > > > > > Link helps. > > > > > > > > It’s not good practice to call “c” functions from golang. > > > > That’s why I develop client by pure golang without Ignite “cpp” > client > > > API. > > > > > > > > I already tested golang “handshake” using ODBC endpoint server:10800. > > > > It works great. > > > > But I don’t see support of transactions via ODBC... > > > > > > > > Yes, I would like to develop true native client. > > > > How can I get protocol specification to develop client > BinaryMarshaller > > > with pure golang? > > > > > > > > Thanks, > > > > Aleksandr > > > > > > > > From: Denis Magda > > > > Sent: 28 июня 2017 г. 2:00 > > > > To: dev@ignite.apache.org > > > > Subject: Re: golang client for Ignite > > > > > > > > Hi Aleksandr, > > > > > > > > That looks really interesting to me. Personally, I would like to see > a > > > dedicated Go module in Ignite. > > > > > > > > Do you support SQL API right now? If it’s so then you might want to > > > switch to Ignite JDBC driver instead that should outperform the REST > > > protocol. > > > > > > > > Otherwise, if the goal is to go beyond SQL boundaries adding > key-value > > > and transactions to the list then we should either use the REST or > > create > > > a true native client. Read more about native clients development here: > > > > http://apache-ignite-developers.2346864.n4.nabble. > > > com/Read-this-if-you-want-to-integrate-Ignite-with-other- > > > platforms-Python-R-etc-td14006.html#a14028 > > > > > > > > — > > > > Denis > > > > > > > >> On Jun 27, 2017, at 2:29 PM, Aleksandr Sokolovskii < > amso...@gmail.com > > > > > > wrote: > > > >> > > > >> Dear Ignite team, > > > >> > > > >> I see there is no native client for golang. > > > >> I tried to fix this gap a little bit and developed golang SQL driver > > > for ignite/gridgain: https://github.com/amsokol/go-ignite-client. > > > >> Enjoy ))). > > > >> It's in beta phase now. I’m focusing on test coverage now. > > > >> > > > >> Driver uses HTTP REST API which is overhead. > > > >> Could you please provide me specification of ignite native > > > platform-independent client-server protocol. > > > >> I easy add it as well. > > > >> > > > >> I think many people tell us thanks for golang native client and SQL > > > driver ))) > > > >> > > > >> P.S.: If you are interesting in my project please let me know. I can > > > easy donate (and support) my code to your project. > > > >> > > > >> Thanks, > > > >> Aleksandr > > > >> > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >