Yes, Enno is right about JDBC. Because JDBC is blocking in nature and JDBC
operations could be frequently performed when you are working on a RDBMS in
Java, limiting them will potentially improve the topology's throughput.

Fan

2015-05-15 9:32 GMT-04:00 Enno Shioji <eshi...@gmail.com>:

> JDBC drivers have no facility to make asynchronous requests, so the thread
> that's calling it has to wait until the IO call finishes, before doing
> anything else. This can be wasteful if there is useful work that could have
> been done in the mean time.
>
> Especially in case of storm, the thread that calls the tasks can be shared
> by multiple tasks (depending on the configuration), in which case there is
> *probably* useful work that can be done which can't be, because the thread
> is "blocked".
>
> This is not specific to JDBC. Also it's not obvious if you are better off
> by not blocking; e.g. if there is no work that can be done with the thread
> anyways, you can end up decreasing the overall performance with the
> additional overhead.
>
> On Fri, May 15, 2015 at 1:56 PM, Jeffery Maass <maas...@gmail.com> wrote:
>
>> Fan:
>>
>> Why are you singling out JDBC operations to avoid?  What is it about them
>> that is especially "blocking"?
>>
>> Thank you for your time!
>>
>> +++++++++++++++++++++
>> Jeff Maass <maas...@gmail.com>
>> linkedin.com/in/jeffmaass
>> stackoverflow.com/users/373418/maassql
>> +++++++++++++++++++++
>>
>>
>> On Thu, May 14, 2015 at 9:41 AM, Fan Jiang <dcva...@gmail.com> wrote:
>>
>>> One thing to note is that you should try to avoid JDBC operations in a
>>> bolt, as they may block the bolt and affect the topology's performance. Try
>>> to do the database access asynchronously, or create a separate thread for
>>> JDBC operations.
>>>
>>> 2015-05-14 10:30 GMT-04:00 Mason Yu <computerhon...@gmail.com>:
>>>
>>> Interesting.....  Hibernate hooks inside a J2ee container or Spring
>>>> which requires a specific OR mapping to a 20th century RDBMS.
>>>> Storm works in a Linux distributed environment which does not
>>>> need a RDBMS.  RDBMS's do not work in a distributed environment.
>>>>
>>>> Mason Yu Jr.
>>>> CEO
>>>> Big Data Architects, LLC.
>>>>
>>>> 著名的孫子
>>>>
>>>> On Thu, May 14, 2015 at 9:58 AM, Stephen Powis <spo...@salesforce.com>
>>>> wrote:
>>>>
>>>>>  [image: Boxbe] <https://www.boxbe.com/overview> This message is
>>>>> eligible for Automatic Cleanup! (spo...@salesforce.com) Add cleanup
>>>>> rule
>>>>> <https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Ftoken%3DuAW1cNLhRjzzoTybJZlWM4edzt3m9fQiQ%252Fotr%252BLEu3ac0GIlaQyl%252Be4UagkWlTiCY%252Bvq8KXOkzkzNY0pSkyJzvKKJyQv%252BXceuaA%252FuExYRw6YS1o2s1%252FImPAjQkHSXt%252FvWesPubbzFPmMWCDCtBIJEA%253D%253D%26key%3D%252BXRs6Dx5fQJ4FB57cniXG9YH1MKQnFQnIVYEqegbWGo%253D&tc_serial=21328751243&tc_rand=1774350433&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_ADD&utm_content=001>
>>>>> | More info
>>>>> <http://blog.boxbe.com/general/boxbe-automatic-cleanup?tc_serial=21328751243&tc_rand=1774350433&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_ADD&utm_content=001>
>>>>>
>>>>> Hello everyone!
>>>>>
>>>>> I'm currently toying around with a prototype built ontop of Storm and
>>>>> have been running into some not so easy going while trying to work with
>>>>> Hibernate and storm.  I was hoping to get input on if this is just a case
>>>>> of "I'm doing it wrong" or maybe get some useful tips.
>>>>>
>>>>> In my prototype, I have a need to fan out a single tuple to several
>>>>> bolts which do data retrieval from our database in parallel, which then 
>>>>> get
>>>>> merged back into a single stream.  These data retrieval bolts all find
>>>>> various hibernate entities and pass them along to the merge bolt.  We've
>>>>> written a kryo serializer that converts from the hibernate entities into
>>>>> POJOs, which get sent to the merge bolt in tuples.  Once all the tuples 
>>>>> get
>>>>> to the merge bolt, it collects them all into a single tuple and passes it
>>>>> downstream to a bolt which does processing using the entities.
>>>>>
>>>>> So it looks something like this.
>>>>>
>>>>>                       ---- (retrieve bolt a) ----
>>>>>                     / ---- (retrieve bolt b) ----\
>>>>>                    /------(retrieve bolt c) -----\
>>>>> --- (split bolt)------(retrieve bolt d)-------(merge bolt) -----
>>>>> (processing bolt)
>>>>>
>>>>> So dealing with detaching the hibernate entities from the session to
>>>>> serialize them, and then further downstream when we want to work with the
>>>>> entities again, we have to reattach them to a new session....this seems
>>>>> kind of awkward.
>>>>>
>>>>> Does doing the above make sense?  Has anyone attempted to do the
>>>>> above?  Any tips or things we should watch out for?  Basically looking for
>>>>> any kind of input for this use case.
>>>>>
>>>>> Thanks!
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Sincerely,
>>> Fan Jiang
>>>
>>> IT Developer at RENCI
>>> dc...@renci.org
>>>
>>
>>
>


-- 
Sincerely,
Fan Jiang

IT Developer at RENCI
dc...@renci.org

Reply via email to