On Thursday, 2 February 2017 at 14:08:19 UTC, Steven
Schveighoffer wrote:
On 2/2/17 1:50 AM, Suliman wrote:
On Thursday, 2 February 2017 at 05:28:10 UTC, Nick Sabalausky
wrote:
Made a couple more long-needed changes while I'm at it:
https://github.com/Abscissa/mysql-native-experimental
Tag: v0.2.0-preview2
- For better clarity, renamed `mysql.db.MysqlDB` to
`mysql.pool.MySqlPool`.
- Package mysql.connection no longer acts as a package.d,
publicly
importing other modules. To import all of mysql-native, use
`import
mysql;`
Thanks! Could you explain about pool. I googled about it, and
still
can't understand when it up new connections?
How can I imagine what connection is? Because without it hard
to
understand what difference between connections with and
without pool.
Am I right understand that if I use pool I can create
connection
instance one time in DB class constructor end every new
connection will
be created on demand?
Just to answer some of this, because I had questions about the
pool as well.
The ConnectionPool is a mechanism to allow a limited resource
(or a resource you want to limit, depending how you look at it)
to be pooled for use. It's basically a free-list. It also
abstracts away the details of opening a connection (i.e. server
ip, username, password). It's nice because it makes opening a
connection cleaner and straightforward.
The resulting connection can only be used in one fiber at a
time, and the connection pool itself can only be used in one
thread ever (there is no sharing of connection pools between
threads). The resulting connection struct is reference counted,
so it automatically releases back to the pool when it goes out
of scope.
One issue I had with MysqlDB (now MySqlPool) is that it doesn't
allow you to actually put a limit on the connections. In other
words, you can't say "only allow 50 simultaneous connections".
The effect is that you save the connection initialization, but
you can't put a hard cap on connections used in your thread. If
you have 10,000 fibers running at once, then you may get 10,000
connections to the database that are left open. If each of
those is a socket, you are consuming a lot of resources during
down times.
Not to mention that the allocation of the 10,000th connection
has to first go on a linear search through the 9,999 other
connections to find an open one (this seems like it could be
solved better with a linked-list freelist?).
See here: https://github.com/mysql-d/mysql-native/issues/74
BTW, I solved this by copying MysqlDB into my local project and
adding the appropriate parameter to the constructor :)
-Steve
Do you mean that every new fiber open new connection? And when
fiber is yield it's return connection to the pool?
Could you explain real case if rangification of ResultSet
http://semitwist.com/mysql-native-docs/v0.2.0-preview1/mysql/result/ResultSet.html
Does it's mean that I can write
foreach(x;result.empty) ? Or how to use it?