Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

That is a bad idea I think — SQLite locks the database while inserting data, obviously this is bad for a big application. I don't think it was designed for web apps with possibly hundreds of queries a second.


SQLite is a lot faster than than the 'real' RDBMSes on single queries - so this lock on writing is not that painful as it might seem. I think SQLite is really eating into that quick-and-dirty db segment occupied by MySQL - while PostgreSQL is still ahead in the standard-compliant-robust-and-lot's-of-features department.


There was one time that I forgot to specify an index on a table in SQLite and I ran into locking issues with relatively light load. So indexes, where applicable, are a good thing.

Also, you can consider sandwiching several updates between BEGIN and END. I've discovered this dramatically improves performance. You just query "BEGIN" to start, execute your updates, then query "END" to process them.


You are right. But "hundreds of queries a second" are fine if there're mostly _read_ queries.

http://www.sqlite.org/faq.html#q5


Yeh I should have mentioned the times I've used SQLite was early in development, or one time when I created a script which would pump tons of data into the database in threads, which resulted in errors and missing data. I'm sure I could have added better error exceptions and keep retrying, but if you translate that to a multi-user app, thats just not going to cut it. A quick change to MySQL fixed it. :)

I do like SQLite, just not for anything where you cant control the writes per second, or need it to be high.


Thank you, but what is the definition of a big application? FaceBook? what if you were building something along FogBugz and the like? or maybe even something like BaseCamp? would SQLite fit those types of applications?


You couldn't get anywhere near the size of Facebook on SQLite. Even a FogBugz or BaseCamp type of application on SQLite could be problematic if you are doing lots of writes.

The driver you use to connect to the database is also very important. If I'm not mistaken the PHP driver was pretty terrible a while back. It may be better now. It didn't handle the locks well which sometimes resulted in deadlocked queries with only a handful of users.

Personally, I wouldn't run any multiuser application doing a significant number of writes on SQLite except during early development. I think where it really shines is when you need a lightweight embedded SQL database without the hassle of having to install something extra. Think Amarok or something similar.

I ran Trac on SQLite for a while. Setup was a breeze and performance was reasonable with 3 or 4 users, but a switch to PostgreSQL was a night and day improvement.

If you're set on using an embedded database you might want to check out Firebird or H2. I haven't used Firebird myself, but I have had excellent results with H2. You have the flexibility to use it a few different ways - embedded vs. server mode and in-memory vs. disk storage - and it is very compatible with MySQL syntax so it's useful as a drop-in replacement.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: