[OSM-dev] Limitation on downloading ways via /map API Call

Ben Gimpert ben at somethingmodern.com
Mon Jul 10 09:42:41 BST 2006


> When writing a get_connection function, to make it persist across the
> instance, I would typically do:
> 
> class OSM():
>   def get_connection(self):
>     if self.dbh: return self.dbh
>     try:
>       self.dbh = MySQL.connect()
>       return self.dbh
>     except MySQLError, E:
>       mysql_error(e)
> 

Whichever way this goes, here's Christopher's code ala' Ruby:

module OSM
	# ...

	@@dbh = nil  # one handle per VM

	def create_connection
		begin
			@@dbh = Mysql.real_connect($DBSERVER, $USERNAME, $PASSWORD, $DATABASE)
		rescue MysqlError =>ex
			mysql_error(ex)
		end
	end

	def get_connection
		@@dbh || create_connection
	end

	# ...
end

(Note the feeling of elation on being able to do what I want with
indenting... <snicker>)

		Ben


On Mon, 10 Jul 06 @06:05am, James Mastros wrote:
> On Sun, Jul 09, 2006 at 09:12:43PM +0100, SteveC wrote:
> > * @ 09/07/06 05:12:50 PM crschmidt at crschmidt.net wrote:
> > > This seems to me to be ignoring the fact that we have a get_multi
> > > function which does exactly what this SQL does, for a single way: given
> > 
> > No, it's not ignoring it. It's making a balanced decision about calling
> > the way function hundreds of times or trying to grab all that data at
> > once. Up until today, as you know, it wasn't apparent that the
> > group_concat functions would have a limit.
> 
> No, but it is apparent that group_concat doesn't really "fit" in the design
> of SQL in general, and that joining all the disseperate records into a
> string in the SQL server, and then splitting them back up in the Ruby code
> is going to be sub-optimal.  The server is designed to give back multiple
> records, not to do string manipulation.
> 
> 
> 
> > > This doesn't seem to me to be very hard to fix: all the SQL currently
> > > uses the call_sql function, which uses get_connection, which currently is:
> > 
> > Actually, you would want a pool of db connections not just one.
> 
> No, you want to have one db connection per simulintanious request.  There is
> something of an issue of running out of mysql server handles.  However, it's
> highly unlikely we'll ever reach that limit.  On the other hand, tearing up
> the connection each time is always going to be bad, no matter what the
> server load.  Note that different forks of the apache server are the only
> way to have simulintanious requests, and there is one ruby interpreter per
> fork.
> 
> Note, by the way, the first bullet point in
> http://dev.mysql.com/doc/refman/5.1/en/tips.html -- the MySql manual,
> 7.2.19. Other Optimization Tips.  "Use persistant connections".
> 
> If in doubt, of course, benchmark, by all means.
> 
>    -=- James Mastros
> 
> _______________________________________________
> dev mailing list
> dev at openstreetmap.org
> http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/dev




More information about the dev mailing list