Not to reply to myself, however, one thing I have not heard this time is a real world usage of this functionality. One case where "you" (ie, someone on the list) would extract a benefit from using the SQLite backend. Give me a problem that using SQLite as a *generic* session backend will solve your problem better, or in a way that files or MM can't.
I don't think that's much too ask. If you can't think of one, then move it to PEAR/PECL. If we are including this functionality by 'default,' there needs to be some usage, besides slowing down your application, and making your processor red hot. -Sterling PS: Some people seem to be confused by what I meant as default. I meant default in the sense that its always available, always compiled into PHP, not default like its used by default. On Tue, 2003-07-01 at 15:28, Sterling Hughes wrote: > Hi, > > Recently sqlite sessions have been added by default. I think this is a > bad idea to have as a default handler. SQLite is not designed for a > write intensive environment, and encouraging such usage seems to be > silly. > > SQLite is bad because: > > 1) It uses one file for the entire db. Therefore, every time *any* > session is updated, all sessions must be locked. This means that if you > have session a and session b in two separate processes, they must be > updated one at a time, instead of together. Furthermore, this clusters > terribly, requiring all locks to happen on a single file across a > cluster(*). > > It also means that if one session gets corrupted, all your sessions will > be corrupted. If a session file gets removed, then you've lost all > your session files. > > 2) It offers not one practical advantage. When asking the proponents of > SQLite based sessions, they said the advantage is that everything is in > one file. > > That's the disadvantage. > > Having a single point of access, single point of failure, single point > of performance degradation is a never a good thing, especially if it > buys you nothing. After fixing the extension (the CVS version is > broken), I did some benchmarks on the following script: > > <?php > mt_srand(); > session_id(mt_rand(0, 300)); > session_start(); > if (!isset($_SESSION['counter'])) { > $_SESSION['counter'] = 0; > } else { > $_SESSION['counter']++; > } > echo $_SESSION['counter']; > ?> > > With sqlite synchronization enabled, I got :: > > files = 410-440 req/s > sqlite = 33-35 req/s > > With synchronization disabled, I got :: > > files = 410 - 440 req/s > sqlite = 150-179 req/s > > That's a very signifigant slowdown, and it wins you nothing. A base > script :: > > <?php > echo $i++; > ?> > > Gets 520 req/s on my machine. > > 3) Writing the code in C gains you nothing. Its not like you'll be > gaining req/s if the code is in a C session handler vs. a PHP session > handler. The C code is also harder to maintain. For example, in order > to prove that sqlite sessions were slow and otherwise crappy, I had to > "fix" 3 segfaults in the session handler code, and change the queries > around. > > If we want SQLite sessions, I submit this should be in a PEAR class or a > PECL handler (like with PostgreSQL). SQLite sessions should not be a > recommended method, they don't gain you anything, and at the same time > they hurt you performance-wise. Having users who really want it, go: > > # pear install SQLite_Session > > Is not a hard cross to bear, and considering that sqlite enabled > sessions should be avoided in the first place, I think its a bad idea to > include them by default. > > -Sterling > > (*) You may argue "don't cluster sqlite sessions." That's not a good > thing. Fine, don't cluster sqlite sessions, but that's a negative, > against sqlite. > > -- > "Nothing is particularly hard if you divide it into small jobs." > - Henry Ford -- "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php