SQLite 的讀寫效率很高,有哪些使用其他資料庫的理由?

有什麽是SQLite無法實現的嗎?為何MySQL還是最火的?


如果你覺得資料庫主要參數是速度,顯然你不懂資料庫。
SQLite性能高完全是因為它不具備很多資料庫必要的特性,比如完整事務性,大數據集(順便吐槽,我們之前評測的時候測試過10億,時間有一些比這個表裡的SQLite快,也不知道這個評測怎麼做的),連跨進程並發都沒有。
所以說白了,性能的優勢完全來自於缺少的功能。
當然,它也有很大的適用範圍。


首先這種測試就是胡扯,沒任何意義。查詢是基於什麼硬體環境?負載類型是什麼?查詢語句複雜度?查詢語句種類?並發量是什麼?程序和資料庫在同一個機器還是不同機器?連資料庫的驅動是什麼?其次資料庫性能僅僅是資料庫選型的一方面,還有功能,穩定性,工具支持,成熟案例,兼容性,廠商支持等諸多因素。


你拿給12306用,看買票的打不打你……


資料庫!=SELECT and INSERT


支持完整的sql語法?支持transaction?


主要區別還是 sqlite 是本地嵌入式資料庫,也就是提供一個 lib 給程序調用的那種。 它不能提供遠程服務(除非你給它包裝一個服務端), 多進程讀寫同個文件也有一些限制。 適合客戶端存一些數據,或者並發不高的服務端處理一些本地數據。該用 oracle / mysql 的場合, sqlite 根本就不是備選選手。

它的主要競爭對手並非 mysql 之類的通用資料庫。 而是老牌的 BDB ,新秀 LevelDB之類的嵌入式資料庫, 甚至是直接 hash/b+tree file/mmap 的手寫解決方案,這類的東西一般都比mysql之類有更高的性能。

我感覺在這場本地存儲引擎的競爭裡面, sqlite 更加易用,而且性能可以接受,這就是最大的亮點了。 我有點後悔以前的 hash + mmap 方案----太費代碼了。


單文件,&無事務(?)&,寫為全表鎖,最多只作為本地的小型DB,大型的話不靠譜。

-----
查了一下,sqlite是支持並默認啟用事務,但寫入是粗粒度的全表排它鎖,會鎖定其他連接的寫操作直到完成寫入。這對於高並發來說就是很大的問題了。而且對於其他基於網路連接的資料庫來說,網路通信本身也是一個消耗,那一個本地IO和一個本地IO加網路IO通信的對比,也不對稱了吧。

另胡扯一個,sqlite是基於本地IO文件的,以為著資料庫文件直接暴露在調用面前,文件被攻擊的可能性更明顯;其他基於網路連接的,資料庫文件前面還有DBMS和網路連接協議擋著,對於網路協議破壞較難波及到資料庫文件本身。


SQLite isn"t a network database, so it doesn"t have any network connection ability built into it.

SQLite僅僅是一個嵌入式資料庫,可以說不是嚴格意義上的一個資料庫,和其他的沒有可比性。

遠程查詢SQLite ,必須 ssh 過去,再本地查詢,你說這是資料庫嗎?


SQLite的並發性能並不好,所以不適合作為大型系統資料庫,但作為單個軟體的資料庫,比如嵌入式系統、桌面應用等,是很完美的


所以使用SQLite 一般都在客戶端使用…缺少了關係資料庫的大部分特性,主要是數據事務保證,數據關聯性,存儲過程觸發器什麼的就更沒有了…所以,那麼迷你的數據容器當然比server級的資料庫要佔用系統資源少,但是又提供了統一的數據CRUD介面,從這點看廣義說跟C#的LINQ有點相同感覺。
所以業務越複雜,可能要考慮數據的冗餘型,參照性,並在範式上做取捨,同時要考慮數據的橫向和縱向擴展性,進一步的數據量上來後,還要考慮數據的undo和redo,以及並發性等等…這時候就是oracle和DB2的地盤了,一套IOE設備可不是白燒的…


Sqlite每秒只能提交很少次事務。
當你積攢很多次insert一併提交,性能很好。
如果你一次一次插入並立刻提交,保證跪下。

並發方面的問題就更用不著噴了。


謝邀。

1.SQLite只是一個渣渣本地通用型存儲組件而已,根本就稱不上是資料庫。

2.真正的資料庫都是基於網路通信,瓶頸就容易卡在這裡。資料庫在單機下僅拼簡單的讀寫操作肯定容易落後於SQLite。不過,SQLite只是一個本地通用型存儲組件。我如果寫一個本地專用存儲組件,同樣可以秒掉SQLite。


請區分資料庫和資料庫管理軟體,sqlite 缺乏大型資料庫的優化和管理功能。


大部分的軟體是輕量級存儲,能提供數據持久保存、簡單的查詢就夠了,這是用SQLite比其他資料庫軟體有相當的優勢,個人認為主要是兩點:

1)效率較高、不容易出問題;

2)兼容性好,市面上大部分系統都支持,不需要額外學習或其他解決方案;

話說回來,題主提問好像是捨我其誰的意思,這個玩笑就開大了。最簡單的例子,一個ERP系統數據分別存儲在不同資料庫伺服器,應用程序需要從不同資料庫伺服器查詢數據,其他的支持網路連接的資料庫直連就好了,用sqlite做一個試試。再者,在不同伺服器做數據聯查,用sqlite實現一個。


個人理解是sqlite是一個本地嵌入使用的資料庫,而大家拿來與之比較的mysql之類的是資料庫伺服器


無加密 無並發 無事務。。當然快啦


如果這個測試裡面的用例能滿足你的需要,確實你不需要使用其他資料庫。


這個評測明顯是誤導人。。。。。sqlite 優勢是方便,而不是速度

而且評測的速度明顯是寫了幾行代碼,循環查找插入來測的,這種評測毫無意義

實際應用中,要考慮的很多,比如並發寫入和查詢,連接池維護,資料庫緩存

sqlite其實更適合單用戶或者少用戶來使用,速度從來不是sqlite的優勢,甚至一直被詬病


SQL ite 我們產品還在用,這種資料庫優缺點都很明顯,我說說缺點:1.鎖的粒度比較粗,導致一些事務做不好2.並發效果不是很好的,主要作為一個local 資料庫,網路做起來比較麻煩,更不要說集群了,所以數據備份安全都要花很大力氣做。3作為rdbs 讀寫不能分離,哎!4.他的性能主要依靠disk ,還有就是他的處理thread 很容遇到短板!


為啥沒有人提Hadoop下的各種資料庫,TB到PB級別的數據你怎麼搞。


推薦閱讀:

怎麼看待王津THU的海量事務高速處理系統?
關係型資料庫會在 web 開發中消失嗎?
什麼工具可以把Sqlite里所有的表,導出建表的SQL語句?
海量資料庫、高性能資料庫等,具體怎麼衡量?
mysql mybatis怎麼更新blob欄位?

TAG:資料庫 | 編程語言 | SQL | MySQL | SQLite |