在hign并发环境中SQLite阻塞表丢失数据。我正在寻找提高SQLite的高性能并且不会丢失插入查询数据的方法。我的意图是知道用于插入的并发用户数限制,即网站在“高并发性”的情况下工作(在本例中为1插入请求)。为了使这个测试案例更简单,用户会发送数据到数据库Sqlite3插入性能测试
节省寻找如何提高性能和使用建议其他用户后:
- sqlite.org
- sqlite.org/的faq.html#Q19
- stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of-sqlite
- stackoverflow.com/questions/54998/how-scalable-is-sqlite
我决定在一个亚马逊小实例中做一个小测试。
平台
- Linux版本的2.6.35.14-106.53.amzn1.i686([email protected])(gcc版本4.4.5 20110214(红帽4.4.5-6)( GCC))#1 SMP周五1月6日十六时20分23秒UTC 2012
- SQLite的3.6.20
- Lighttpd的1.4.29
- 腓5.3.10
test.php with insert sql:
PRAGMA synchronous = OFF; BEGIN TRANSACTION; INSERT INTO
test
(data1
,date
)VALUES('“。$ _ POST ['data1']。”',date()); END TRANSACTION;
使用Apache HTTP服务器基准测试工具。
数据库是文件系统中不在RAM中的文件。
结论: 测试1:AB -n 10000 -c 50 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 时间采取测试:63.637秒
- 完成请求:10000
- 失败请求:0
- Sqlite插入行:10050
- Average:159.52 insert/sg
Test2:ab -n 10000 -c 100 -k xxxx.xxx/test.php?DATA1 = fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 时间采取的测试:64.221秒
- 完成请求:10000名
- 失败的请求:0
- SQLite的插入的行:10100
- 平均:157.26插入/ SG
Test3:ab -n 10000 -c 150 -k xxxx.xxx/test.php?data1=fc82bf71a0d 5f8a3c2dc868ebe0d6eaa
- 时间采取测试:33.338秒
- 完整的请求:10000名
- 失败的请求:7095
- (连接:0,接收:0,长度:7095,例外:0)
- SQLITE:2905插入行
- 平均值:丢失数据!
TEST4:AB -n采取测试10000〜C 200的-k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 时间:33.705秒
- 完成请求:万名
- 失败的请求:7049
- (连接:0,接收:0,长度:7049,例外:0)
- SQLITE:2918插入行
- 平均:丢失数据!
在这个特定的环境中,我们可以使用SQLite最多100个并发用户,平均值为157.26 insert/sg。考虑到这个结果只适用于插入数据。
从我的无知,有可能防止丢失数据?是否有可能改善这种表现?
我喜欢SQLite的,但你真的不打自己的优势......为什么不记录到文件中,然后定期导入that've对于SQLite – Eli 2012-04-15 05:42:10
我们正在使用sqlite3的生产与基于Web的约20个用户Rails应用程序(并非全部都在同一时间在线)。到目前为止,我们还没有听到投诉。现在我们正在开发一个拥有大约60个用户的Web应用程序,我们想知道是否需要使用其他数据库,如postgres或mysql。您发布帮助以了解sqlite3的限制和100个并发用户对我们的应用程序看起来不错。你是否尝试从多台电脑或更大的数据集插入启动插入? Sqlite3使用非常简单,我们喜欢它。 – user938363 2012-10-16 15:35:44
c = 100和150之间是否有c测试没有丢失数据? – user938363 2012-10-16 17:48:23