ãå³è§£ã§æ¯èŒãSQLite vs DuckDB â çµã¿èŸŒã¿ããŒã¿ããŒã¹ãçšéã§äœ¿ãåãã
ã©ã¡ããéžã¶ïŒçšéãšåææžã蟌ã¿ã§æ¯èŒ
| 確èªããããš | SQLite | DuckDB |
|---|---|---|
| äž»ãªçšé | ã¢ããªã®ããŒã¿ä¿åã»å°ããªæŽæ° | ããŒã«ã«ã®åæã»éèš |
| éèš | å¯èœãå¿ èŠãªã€ã³ããã¯ã¹ãæ€èš | å€ãã®è¡ããå¿ èŠãªåãèªãåæã«é©ãã |
| æžã蟌㿠| åæã«æžã蟌ããã®ã¯1ã€ãåŠçãé çªã«ãã | éåžžã®DBãã¡ã€ã«ã¯1ããã»ã¹ããèªã¿æžããå éšã®è€æ°ã¹ã¬ããã¯å©çšå¯èœ |
| Parquetãåæ | æšæºã®SQLæ©èœã ãã§çŽæ¥èªãçšéã§ã¯ãªã | ãã¡ã€ã«ãçŽæ¥SQLã§èªãã |
| äœµçš | SQLiteãã¡ã€ã«ãä¿åå ã«ãã | sqliteæ¡åŒµã§SQLiteãåç §ãã |
åæã¢ã¯ã»ã¹ã®å¶çŽã¯ãæ¥ç¶ã§ãã人æ°ããšã¯éããŸããSQLiteã«è€æ°ã®æ¥ç¶ããã£ãŠããæžã蟌ã¿ã¯é çªã«ãªããŸããDuckDBã®èª¬æã¯éåžžã®ããã»ã¹å åäœã«ã€ããŠã§ãå¥éãµãŒããŒæ§æãæ¡ãå Žåã®æ¡ä»¶ã¯åºå¥ããŠãã ããã
DuckDBããSQLiteãèªããšèªåã§åæåã«ãªãïŒ
ATTACHããã ãã§ã¯ãSQLiteãã¡ã€ã«ãDuckDBã®åæå圢åŒã«å€æãããããã§ã¯ãããŸããã sqliteæ¡åŒµã¯ã¯ãšãªæã«SQLiteåŽã®ããŒãã«ãèªã¿ãŸããã³ããŒäžèŠã§å©çšã§ãã䟿å©ããšãDuckDBãã€ãã£ãã®ããŒãã«ãšåãæ§èœãåºããã¯å¥ã§ãã
ããšãã°æ€èšŒçšã®sample.dbã«ordersããŒãã«ãããå ŽåãDuckDBåŽã§æ¬¡ã®ããã«åç
§ã§ããŸããsqliteæ¡åŒµãå©çšã§ããç°å¢ãåæã§ãã
ATTACH 'sample.db' AS app (TYPE sqlite, READ_ONLY);
SELECT COUNT(*) AS order_count FROM app.orders;
ãã®äŸã¯èªã¿åãå°çšã§æ¥ç¶ããŸãããæ¡åŒµèªäœã¯æžã蟌ã¿ãå¯èœã§ããæ¬çªãã¡ã€ã«ã§ã¯ãªãæ€èšŒçšããŒã¿ã§è©ŠããSQLiteãšDuckDBã®åã®æ±ãã®å·®ã確èªããŠãã ããã
Parquetãéèšãããå Žå
amountåã®ããorders.parquetãDuckDBã§éèšããäŸã§ããDBããŒãã«ãžäºåã«ã€ã³ããŒãããå¿
èŠã¯ãããŸããã
SELECT SUM(amount) AS total_amount
FROM read_parquet('orders.parquet');
ãã¡ã€ã«ã®å§çž®æ¹åŒãå¿ èŠãªåãçµãèŸŒã¿æ¡ä»¶ã§åŠçéãå€ãããŸããåã«ãSQLiteããäœåéãããšãããåãããŒã¿ãšéèšå 容ã§ç¢ºèªããŸãããã
è£è¶³
SQLiteã§ãå°ããªããŒã¿ã®éèšã¯ã§ããŸãããDuckDBããã©ã³ã¶ã¯ã·ã§ã³ãæ±ããŸãããã®èšäºã®åãæ¹ã¯èšèšã®åŸæã»äžåŸæã§ãçæ¹ãã䜿ããªããšããæå³ã§ã¯ãããŸãããé床ã¯ç°å¢ãšããŒã¿ã§å€ãããããæ°åã¯ãã®èšäºã§ã¯ç€ºããŠããŸããã
SQLiteã®èªã¿åããšæžã蟌ã¿ã¯å šéšçŽåã«ãªãïŒ
æžã蟌ã¿ãåæã«è¡ããã®ã¯1ã€ã§ãããWALã¢ãŒãã§ã¯èªã¿åããšæžã蟌ã¿ã䞊è¡ãããããŸãã ãSQLiteã¯1人ããæ¥ç¶ã§ããªãããšããæå³ã§ã¯ãããŸããããã ãWALã«ããã§ãã¯ãã€ã³ããªã©ã®éçšããããã¢ãŒããå€ããã°åææžã蟌ã¿ãŸã§å¢ããããã§ã¯ãããŸããã
SQLiteã®è¡ãé »ç¹ã«æŽæ°ããã¢ããªãšã売äžåããŸãšããŠéèšããåæã§ã¯ãèªãç¯å²ãåŠçã®é »åºŠãéããŸããå³ã¯åãååã®ããŒã¿ã䜿ãããã®åŸæåéã®éãã瀺ããŠããŸããéããã®ãã®ã枬ã£ãå³ã§ã¯ãããŸããã
éžã³æ¹ã®ãŸãšã
ãŸãã¢ããªã®ä¿åã»æŽæ°ãäžå¿ãªãSQLiteãCSVãParquetã®åæãäžå¿ãªãDuckDBãæ€èšããŸãããã§ã«SQLiteã«ããŒã¿ããããªãsqliteæ¡åŒµã§è©Šããå¿ èŠã«å¿ããŠåæçšã®ã³ããŒãäœãæ¹æ³ããããŸãã䜵çšã§ã¯åã®æ±ããšæžã蟌ã¿ã®ç«¶åã確èªããŠãã ããã
åèè³æ
ç¢ºèªæ¥ïŒ2026幎10æ4æ¥ã
-
SQLiteïŒAppropriate Uses For SQLite â æžã蟌ã¿ã¯åæã«1ã€ããããã¯ãŒã¯è¶ãã»å€§èŠæš¡ããŒã¿ã§ã¯ã¯ã©ã€ã¢ã³ã/ãµãŒããŒåãæ€èšã
-
DuckDBïŒWhy DuckDB â åæïŒOLAPïŒåããåæåã»ãã¯ãã«åã®å®è¡ãšã³ãžã³ãããã»ã¹å ã§åäœã
-
DuckDBïŒConcurrency â è€æ°ããã»ã¹ããã®æžã蟌ã¿ã®å¶çŽããªã¢ãŒããããã³ã«ã¯ããŒã¿ã
-
DuckDBïŒInserting Data â 1è¡ãã€ã®INSERTãé¿ããæšå¥šã
-
DuckDBïŒSQLite Extension â ATTACHã§SQLiteãã¡ã€ã«ãèªã¿æžããåã®éããšæžã蟌ã¿ã®å¶çŽã
-
DuckDB â Reading and Writing Parquet FilesïŒread_parquetãåã»æ¡ä»¶ã«ããèªã¿åãã®æé©åã
-
SQLite â Write-Ahead LoggingïŒèªã¿æžãã®äžŠè¡æ§ãšåææžã蟌ã¿ã®å¶çŽã
-
DuckDB â ATTACH and DETACHïŒèªã¿åãå°çšã®æ¥ç¶ãšãã¡ã€ã«åœ¢åŒã®æå®ã