really useful, thanks! On Tue, May 19, 2015 at 2:30 PM, Vaclav Loffelmann < vaclav.loffelm...@socialbakers.com> wrote:
> Hi, > currently we are migrating all read services to Java. For Phoenix 3.0 > we used to use Phoenix proxy server [1, 2]. > > If you want use your existing code and native Java Phoenix client, you > can consider interpreting JS on Nashorn (Java 8) with Avatar.js. > > Vaclav; > > [1] https://github.com/falsecz/phoenix-proxy-server > [2] https://github.com/falsecz/node-phoenix-proxy > > On 05/19/2015 02:46 AM, Eli Levine wrote: > > Yeah, so you can see that code creates a String array containing > > the whole result set. Usually a very bad idea for 400K-row result > > sets. You want to process results incrementally, probably via > > paging using row-value constructors and LIMIT. > > > > On Mon, May 18, 2015 at 12:00 PM, Isart Montane > > <isart.mont...@gmail.com> wrote: > > > >> Thanks James. > >> > >> That code is from the node driver, I will try to get some advice > >> from it's developer. > >> > >> Thanks, > >> > >> > >> On Mon, May 18, 2015 at 6:34 PM, James Taylor > >> <jamestay...@apache.org> wrote: > >> > >>> Hi Isart, That code isn't Phoenix code. This sounds like a Node > >>> JS issue. Vaclav has done a lot with Node JS, so he may be able > >>> to give you some tips. Thanks, James > >>> > >>> On Mon, May 18, 2015 at 9:06 AM, Isart Montane > >>> <isart.mont...@gmail.com> wrote: > >>>> Hi Eli, > >>>> > >>>> thanks a lot for your comments. I think you are right. I > >>>> found the > >>> client > >>>> code that's causing the issue. Do you have an example I can > >>>> use to > >>> patch it? > >>>> is that the recommended way to access phoenix? I've seen on > >>>> the web that there's also a query server available, is it > >>>> worth a try? > >>>> > >>>> > >>>> public String[] query(String sql) { List<String> lsResults = > >>>> new ArrayList(); Connection conn = null; try { conn = > >>>> this.dataSource.getConnection(); ResultSet rs = > >>>> conn.createStatement().executeQuery(sql); ResultSetMetaData > >>>> data = rs.getMetaData(); int numberOfColumns = > >>>> data.getColumnCount(); List<String> lsRows = new > >>>> ArrayList(); for (int i = 1; i <= numberOfColumns; i++) { > >>>> lsRows.add(data.getColumnName(i)); } lsResults.add(join("\t", > >>>> lsRows)); lsRows.clear(); while (rs.next()) { for (int i = 1; > >>>> i <= numberOfColumns; i++) { lsRows.add(rs.getString(i)); } > >>>> lsResults.add(join("\t", lsRows)); lsRows.clear(); } > >>>> rs.close(); conn.close(); } catch (Exception e) { > >>>> e.printStackTrace(); return null; } return > >>>> (String[])lsResults.toArray(new String[lsResults.size()]); } > >>>> > >>>> On Mon, May 18, 2015 at 5:43 PM, Eli Levine > >>>> <elilev...@gmail.com> > >>> wrote: > >>>>> > >>>>> I don't have info on what your app does with results from > >>>>> Phoenix. If > >>> the > >>>>> app is constructing some sort of object representations > >>>>> from Phoenix > >>> results > >>>>> and holding on to them, I would look at what the memory > >>>>> footprint of > >>> that > >>>>> is. I know this isn't very helpful but at this point I > >>>>> would try to dig deeper into your app and the NodeJS driver > >>>>> rather than Phoenix, since > >>> you > >>>>> mentioned the same queries run fine in sqlline. > >>>>> > >>>>> On Mon, May 18, 2015 at 7:30 AM, Isart Montane < > >>> isart.mont...@gmail.com> > >>>>> wrote: > >>>>>> > >>>>>> Hi Eli, > >>>>>> > >>>>>> thanks a lot for your answer. That might be a workaround > >>>>>> but I was > >>> hoping > >>>>>> to get a more generic answer I can apply to the > >>>>>> driver/phoenix since > >>> that > >>>>>> will require me lots of changes to the code. > >>>>>> > >>>>>> Any clue on why it works with sqline but not trough the > >>>>>> node driver? > >>>>>> > >>>>>> On Mon, May 18, 2015 at 4:20 PM, Eli Levine > >>>>>> <elilev...@gmail.com> > >>> wrote: > >>>>>>> > >>>>>>> Have you looked at paging [1] using Phoenix's row-value > >>>>>>> constructors together with the LIMIT clause? That might > >>>>>>> be what you are looking > >>> for. > >>>>>>> > >>>>>>> [1] http://phoenix.apache.org/paged.html > >>>>>>> > >>>>>>> Eli > >>>>>>> > >>>>>>> > >>>>>>> On Mon, May 18, 2015 at 6:46 AM, Isart Montane < > >>> isart.mont...@gmail.com> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> Hi, > >>>>>>>> > >>>>>>>> the company I work for is performing some tests on > >>>>>>>> Phoenix with > >>> NodeJS. > >>>>>>>> For simple queries I didn't had any problem, but as > >>>>>>>> soon as I start > >>> to use > >>>>>>>> our app I'm getting "process out of memory" errors on > >>>>>>>> the client > >>> when I runs > >>>>>>>> queries that return a big number of rows (i.e. 400k) > >>>>>>>> . I think the > >>> problem > >>>>>>>> is that the client tries to buffer all the results in > >>>>>>>> RAM and that > >>> kills it. > >>>>>>>> The same query runs fine when I run it with sqline. > >>>>>>>> > >>>>>>>> So, is there a way to tell the client to stream the > >>>>>>>> results (or > >>> batch > >>>>>>>> them) instead of buffering them all? is raising the > >>>>>>>> client memory > >>> the only > >>>>>>>> solution? > >>>>>>>> > >>>>>>>> I'm using phoenix-4.3.1 and > >>> https://github.com/gaodazhu/phoenix-client > >>>>>>>> as the NodeJS driver > >>>>>>>> > >>>>>>>> Thanks, > >>>>>>>> > >>>>>>>> Isart Montane > >>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> > >> > > >