On Monday, August 27, 2012 6:29:16 PM UTC-7, Jeremy Evans wrote:
>
> On Monday, August 27, 2012 5:33:28 PM UTC-7, Ravi wrote:
>>
>> ok, I think I am doing lot of "bad" things here ( may be because I
>> started using Sequel a few days back)
>>
>
> You haven't explained why you need to disconnect existing connections. In
> a well designed application/database configuration, you should not need to
> do so.
>
>
>> What I exactly want to do (may not be a good method to do)
>> I want to perform 2-3 basic db operation:
>>
>> So created a class dbConnect as I specified earlier:
>> class dbConnect
>> def initialize(table_name)
>> @DB = Sequel.connect("myswl:...", :max_connection=>3,
>> :pool_sleep_time=>0.01, :pool_timeout=>30)
>> @dataset = @DB[table_name]
>> end
>> def add(parameters)
>> #perform insert query here @dataset.insert(parametrs)
>> end
>> #similarly update and fetch
>> end
>>
>> I have other program which is multi-threaded and each thread (not a db
>> thread) calls this class and perform certain query at the same time as
>> follows:
>>
>> #for each thread in the code
>> db = dbConnect.new(:test_table)
>> db.add(list_of_param)
>> db.update(list_of_param)
>> ####
>>
>> Thats it.
>>
>
> This is a bad idea. For one, it probably leaks memory (since the database
> object is cached in Sequel::DATABASES). Why can't you assign the
> database/dataset object to a constant and just work with that? Why do you
> want to create a new database/dataset for each thread?
>
>
>> What action I can take now with what I understood is:
>> Making the connection as SingleThreaded (or max_connection=>1) and
>> disconnecting the database.
>>
>> class dbConnect
>> def initialize(table_name)
>> @DB = Sequel.connect("myswl:...")
>> Sequel.single_threaded = true
>> @dataset = @DB[table_name]
>> end
>>
>> def disconnect
>> @DB.disconnect #here I dont need synchronize if the connection is
>> Single threaded..
>> end
>> end
>>
>> db = dbConnect.new(:test_table)
>> db.add(list_of_param)
>> db.update(list_of_param)
>> db.disconnect
>>
>> I know it is not optimal (it is just a working code!). I really
>> appreciate if you can correct or optimize it.
>>
>
> This has the same issues as the code above. I can't see a reason for it.
>
> Do this instead:
>
> # Do this exactly once when starting your app
> DB = Sequel.connect("mysql:...")
>
So, should this connection be closed at end of the application??
>
> # do this each time you want to add/update
> DB[:test_table].add(list_of_param)
> DB[:test_table].update(list_of_param)
>
> If you must wrap it in a class:
>
> # classes in ruby must start with a capital letter
> class DbConnect
> DB = Sequel.connect("mysql:...", :max_connection=>3,
> :pool_sleep_time=>0.01, :pool_timeout=>30)
>
I have did this change earlier, but here why we need max_connection=>3 and
can we use single_threaded because either ways the connection used is 1
only ..
>
> def initialize(table_name)
> @dataset = DB[table_name]
> end
>
> def add(parameters)
> @dataset.insert(parameters)
> end
>
> # similarly for update/fetch
> end
>
> You should not need to disconnect manually except in unusual
> circumstances. Doing so is basically a workaround for a broken or poorly
> designed database configuration. It's better handled by fixing the
> database configuration if you have control over that.
>
> Jeremy
>
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/sequel-talk/-/z9-0LshZ3xQJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.