2çªç®ã®éšåã¯ã¯ã€ãã¯ã¹ã¿ãŒãã§ãã
第äžéš-埮åŠããšæ©èœã
ãã®éšåã¯ãããããçš®é¡ã®SQLiteæ©èœã®å¯ãéãã§ãã ããã§ïŒç§ã®æèŠã§ã¯ïŒæãéèŠãªãããã¯ãéããŸãããããããªãã§ã¯SQLiteã®nãç解ããããšã¯äžå¯èœã§ãã
ç¹°ãè¿ããŸãããå€ãã®æ å ±ããããããèšäºã®åœ¢åŒã¯æ¬¡ã®ããã«ãªããŸããèå³æ·±ããããã¯ãžã®ç°¡åãªçŽ¹ä»ãšã詳现ãèšèŒãããŠããããŒã ãµã€ããžã®ãªã³ã¯ã§ãã æ²ããããªããã®ãµã€ãã¯è±èªã§ãã
ãã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã§ã®SQLiteã®äœ¿çš
SQLiteã¯ãã·ã³ã°ã«ã¹ã¬ããããŒãžã§ã³ïŒã³ã³ãã€ã«ãã©ã¡ãŒã¿ãŒSQLITE_THREADSAFE = 0 ïŒã§æ§ç¯ã§ããŸãã
ãã®ããªã¢ã³ãã§ã¯ãåæã³ãŒããå®å šã«ååšããªããããè€æ°ã®ã¹ããªãŒã ããåæã«äœ¿çšããããšã¯ã§ããŸããã ãªãã§ïŒ ççãªã¹ããŒãã§ã
sqlite3_threadsafeïŒïŒãåŒã³åºãããšã§ãã«ãã¹ã¬ããããããã©ããã確èªã§ããŸãã0ãè¿ãããå Žåãããã¯ã·ã³ã°ã«ã¹ã¬ããã®SQLiteã§ãã
ããã©ã«ãã§ã¯ãSQLiteã¯ã¹ã¬ããåãµããŒãïŒsqlite3.dllïŒã§ã³ã³ãã€ã«ãããŸãã
ãã«ãã¹ã¬ããSQLiteã䜿çšããã«ã¯ãã·ãªã¢ã«åãšãã«ãã¹ã¬ããã®2ã€ã®æ¹æ³ããããŸãã
ã·ãªã¢ã« å ïŒæ¥ç¶ãéããšãã«SQLITE_OPEN_FULLMUTEXãã©ã°ãæå®ããå¿ èŠããããŸãïŒã ãã®ã¢ãŒãã§ã¯ãã¹ã¬ããã¯ä»»æã®æ¹æ³ã§SQLiteåŒã³åºãããã«ã§ããå¶éã¯ãããŸããã ãã ãããã¹ãŠã®åŒã³åºãã¯äºãã«ãããã¯ããå³å¯ã«é çªã«åŠçãããŸãã
ãã«ãã¹ã¬ãã ïŒ SQLITE_OPEN_NOMUTEX ïŒã ãã®ã¢ãŒãã§ã¯ãè€æ°ã®ã¹ã¬ããããåãæ¥ç¶ãåæã«äœ¿çšããããšã¯ã§ããŸããïŒãã ããç°ãªãã¹ã¬ãããåæã«ç°ãªãæ¥ç¶ã䜿çšããããšã¯èš±å¯ãããŠããŸãïŒã éåžžããã®ã¢ãŒãã䜿çšãããŸãã
ããã«è©³ãã
ããŒã¿åœ¢åŒ
SQLiteããŒã¿ããŒã¹ã¯ãïŒããã¹ãïŒããŒã¿ãUTF-8ãŸãã¯UTF-16ã§ä¿åã§ããŸãã
APIã³ãŒã«ã®ã»ããã¯ãUTF-8ãåãåãã³ãŒã«ïŒ sqlite3_XXX ïŒãšUTF-16ãåãåãã³ãŒã«ïŒ sqlite3_XXX16 ïŒã§æ§æãããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ãšæ¥ç¶ã®ããŒã¿åãäžèŽããªãå Žåãå€æã¯ãã®å Žã§å®è¡ãããŸãã
åžžã«UTF-8ã䜿çšããŸãã
UNICODEãµããŒã
ããã©ã«ãã§ã¯ããµããŒãã¯ãããŸããã sqlite3_create_collatââionã䜿çšããŠãç¬èªã®ç §åïŒæ¯èŒã¡ãœããïŒãäœæããå¿ èŠããããŸãã
ãããŠã www.sqlite.org/c3ref/create_function.htmlãä»ããŠïŒïŒãupperïŒïŒãlowerïŒïŒãªã©ã®çµã¿èŸŒã¿é¢æ°ãå®çŸ©ããŸãã
ãã®ãããªãããžã§ã¯ããUnicodeã®åœéã³ã³ããŒãã³ãã ãICUããããŸãã
ãŸããSQLite DLLããã§ã«æ§ç¯ããŠãã人ãããŸãã
SQLiteã§ICUã䜿çšããæ¹æ³ã
ããã«é¢ããèšäºãèŠã€ããŸãã
ããŒã¿åãšå€ã®æ¯èŒ
æ¢ã«è¿°ã¹ãããã«ãSQLIteã䜿çšãããšãä»»æã®åã«ä»»æã®å€ãæžã蟌ãããšãã§ããŸãã
ããŒã¿ããŒã¹å ã®å€ã¯ã次ã®ã¹ãã¬ãŒãžã¿ã€ãã®ããããã«å±ããŸãã
NULL
INTEGER ïŒ1ã2ã3ã4ã6ãŸãã¯8ãã€ãã䜿çšïŒã
REAL ïŒæµ®åå°æ°ç¹æ°ãIEEE圢åŒã®8ãã€ãïŒã
TEXT ïŒããŒã¿ããŒã¹ããŒã¿åœ¢åŒã®æååãéåžžã¯UTF-8ïŒã
BLOB ïŒãã€ããªããŒã¿ããã®ãŸãŸä¿åïŒã
ããŸããŸãªã¿ã€ãã®å€ã®ãœãŒãé ïŒ
-å°ãªããšãNULL ïŒå¥ã®NULLãå«ãïŒã
-INTEGERããã³REAL㯠TEXTããã³BLOBãããå°ãããç®è¡çã«æ¯èŒãããŸãã
-TEXTã¯ã©ã®BLOBãããå°ãããç §åã«åºã¥ããŠçžäºã«æ¯èŒãããŸãã
-BLOBã¯memcmpïŒïŒãä»ããŠäºãã«æ¯èŒãããŸãã
SQLiteã¯ãããã€ãã®å Žæã§æé»çãªåå€æããã®å Žã§å®è¡ããŸãã
-åã«å€ãå ¥åãããšãïŒåã®ã¿ã€ãã«ãã£ãŠå€æã®æšå¥šãèšå®ãããŸãïŒã
-å€ãäºãã«æ¯èŒããå Žåã
åã«ã¯ã TEXT ã NUMERIC ã INTEGER ã REAL ã NONEãšãã ã¿ã€ããã£ã¹ãã®æšå¥šäºé ããããŸãã
BLOBå€ãšNULLå€ã¯ãåžžã«ãçŸç¶ã®ãŸãŸãã®åã«å ¥åãããŸãã
TEXTåã«ã¯ã TEXTå€ãããã®ãŸãŸãå ¥åããã INTEGERãšREALã®å€ãè¡ã«ãªããŸãã
NUMERIC ã INTEGERåã§ã¯ãæ°å€ã¯ããã®ãŸãŸãæžã蟌ãŸãã_mogut_ã®å Žåãè¡ã¯æ°å€ã«ãªããŸãïŒã€ãŸããããã¹ã¬ã¹ãéå€æãèš±å¯ãããŸãïŒã
REALåã®å Žåãã«ãŒã«ã¯INTEGER ïŒ NUMERIC ïŒã«äŒŒãŠããŸãã éãã¯ããã¹ãŠã®æ°å€ãæµ®åå°æ°ç¹åœ¢åŒã§ããããšã§ãã
NONEåã«ã¯ãå€ãããã®ãŸãŸãå ¥åãããŸãïŒç¹ã«æå®ããªãéãããã®ã¿ã€ããããã©ã«ãã§äœ¿çšãããŸãïŒã
ç°ãªãã¿ã€ãã®å€ãäºãã«æ¯èŒããå Žåãè¿œå ã®ã¿ã€ãå€æãå®è¡ã§ããŸãã
æ°å€ãæååãšæ¯èŒãããšãã«ãæååãããã¹ã¬ã¹ãæ°å€ã«å€æã§ããå Žåãæ°å€ã«ãªããŸãã
ããã«è©³ãã
ããã§ãSQLiteã®äžæã®ã€ã³ããã¯ã¹ã«ã¯ãä»»æã®æ°ã®NULLå€ãååšããå¯èœæ§ãããããšã«æ³šæããŠãã ããïŒOracleã¯åæããMS SQLã¯åæããŸããïŒã
ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹
sqlite3_openïŒïŒåŒã³åºãã§ãã¡ã€ã«åã"ïŒmemoryïŒ"ãšããŠæž¡ããšãSQLiteã¯ã¡ã¢ãªå ã«æ°ããïŒã¯ãªãŒã³ãªïŒããŒã¿ããŒã¹ãžã®æ¥ç¶ãäœæããŸã ã
ãã®æ¥ç¶ã¯ã䜿çšããžãã¯ã«ãããšããã¡ã€ã«å ã®ããŒã¿ããŒã¹ãžã®æ¥ç¶ãšãŸã£ããåºå¥ã§ããŸãããåãSQLã³ãã³ãã®ã»ããã䜿çšã§ããŸãã
UPDïŒãã§ã«å€æããŠããŸãããã¡ã¢ãªå ã®1ã€ã®ããŒã¿ããŒã¹ãžã®2ã€ã®æ¥ç¶ãéãããšãã§ããŸãã
rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);
ATTACH DATABASE 'file:memdb1?mode=memory&cache=shared' AS aux1;
詳现ãã芧ãã ããã
è€æ°ã®ããŒã¿ããŒã¹ã«åæã«åå ãã
ããŒã¿ããŒã¹ãžã®æ¥ç¶ãéãã«ã¯ã sqlite3_openïŒïŒåŒã³åºãã䜿çšããŸãã
ãã€ã§ããSQL ATTACH DATABASEã³ãã³ãã䜿çšããŠãéããŠããæ¥ç¶ã«æ倧10åã®ããŒã¿ããŒã¹ãæ¥ç¶ã§ããŸãã
sqlite3_open('foo.sqlite3', &db); // "foo.sqlite3" sqlite3_exec(&db, "ATTACH 'bar.sqlite3' AS bar", ... ); // "bar.sqlite3"
ããã§ãdb1.sqlite3ãã¡ã€ã«å ã®ãã¹ãŠã®ããŒã¿ããŒã¹ããŒãã«ãééçã«äœ¿çšå¯èœã«ãªããŸããã
ååã®ç«¶åã解決ããã«ã¯ãæ·»ä»ãã¡ã€ã«åã䜿çšããå¿ èŠããããŸãïŒã¡ã€ã³ããŒã¹ã¯"main"ãšåŒã°ããŸãïŒã
SELECT * FROM main.my_table UNION SELECT * FROM bar.my_table
ã¡ã¢ãªå ã®æ°ããããŒã¿ããŒã¹ãããŒã¿ããŒã¹ã«æ¥ç¶ãããã£ãã·ã¥ãªã©ã«äœ¿çšããããšã劚ãããã®ã¯äœããããŸããã
sqlite3_open('foo.sqlite3', &db); // "foo.sqlite3" sqlite3_exec(&db, "ATTACH ':memory:' AS mem", ... ); //
ããã«è©³ãã
ããã¯éåžžã«äŸ¿å©ãªæ©èœã§ãã æ¥ç¶ãããããŒã¿ããŒã¹ã¯ãã¡ã€ã³ããŒã¿ããŒã¹ãšåãããŒã¿åœ¢åŒã§ããå¿ èŠããããŸããããã§ãªãå Žåã¯ãšã©ãŒã«ãªããŸãã
äžæããŒã¿ããŒã¹
sqlite3_openïŒïŒã§ãã¡ã€ã«åã®ä»£ããã«ç©ºã®æååãæž¡ããšããã£ã¹ã¯äžã®ãã¡ã€ã«ã«äžæããŒã¿ããŒã¹ãäœæãããŸãã ããã«ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãéããåŸããã£ã¹ã¯ããåé€ãããŸãã
PRAGMAã³ãã³ãã«ããããŒã¿ããŒã¹ã®åŸ®èª¿æŽ
PRAGMA SQLã³ãã³ãã¯ãæ¥ç¶ãŸãã¯ããŒã¿ããŒã¹èªäœã®ãã¹ãŠã®çš®é¡ã®èšå®ãèšå®ããããã«äœ¿çšãããŸãã
PRAGMA name; // name PRAGMA name = value; // name value
æ¥ç¶ã®ã»ããã¢ããïŒåœç¶ïŒã¯ãéããçŽåŸãšäœ¿çšåã«è¡ãå¿ èŠããããŸãã
ãã¹ãŠã®ãã©ã¡ãŒã¿ã®è©³çŽ°ãªèª¬æã¯ãã¡ãã§ãã
ç§ã¯æãéèŠãªäºæã«ã€ããŠèª¬æããŸãã
PRAGMA page_size = bytes; // ; - , ( 4096) PRAGMA cache_size = -kibibytes; // , 2000 PRAGMA encoding = "UTF-8"; // , UTF-8 PRAGMA foreign_keys = 1; // foreign keys, - PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF; // , . PRAGMA synchronous = 0 | OFF | 1 | NORMAL | 2 | FULL; // , .
ãã©ã³ã¶ã¯ã·ã§ã³ã®ãã°ãšã³ããã
ãã®ããããã®ãããã¯ã«ã€ããŠèª¬æããŸãããã¹ã¿ãŒãããšãããã«SQLiteã®ãã¹ã¿ãŒã®ç¬¬3ã¬ãã«ã«é²ã¿ãŸãã
SQLiteã¯ãããŒã¿ããŒã¹ïŒ ACID ïŒã®ããŒã¿ã®æŽåæ§ã泚ææ·±ãç£èŠãã ãã©ã³ã¶ã¯ã·ã§ã³ãä»ããŠããŒã¿ãå€æŽããã¡ã«ããºã ãå®è£ ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠç°¡åã«èª¬æãããšããã©ã³ã¶ã¯ã·ã§ã³ã¯å®å šã«ããŒã«ã¢ãããããããå®å šã«ããŒã«ããã¯ãããŸãã äžéç¶æ ã¯ãããŸããã
ãã©ã³ã¶ã¯ã·ã§ã³ãæ瀺çã«äœ¿çšããªãå ŽåïŒ BEGIN; ...; COMMIT; ïŒã æé»çãªãã©ã³ã¶ã¯ã·ã§ã³ãåžžã«äœæãããŸãã ã³ãã³ããå®è¡ããåã«éå§ããçŽåŸã«ã³ãããããŸãã
ãããã£ãŠãã€ãã§ã«ãSQLiteã®ãé ããã«ã€ããŠã®èŠæ ã SQLiteã¯1ç§ãããæ倧5äžä»¶ã®ã¬ã³ãŒããæ¿å ¥ããããšãã§ããŸããã1ç§ãããæ倧50件ãè¶ ãããã©ã³ã¶ã¯ã·ã§ã³ãèšé²ããããšã¯ã§ããŸããã
ãã®ãããæé»çãªãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠã¬ã³ãŒãããã°ããæ¿å ¥ããããšã¯ã§ããŸããã
ããã©ã«ãèšå®ã§ã¯ãSQLiteã¯æäœäžã«é»æºããªãã«ãªã£ãå Žåã§ãããŒã¿ããŒã¹ã®æŽåæ§ãä¿èšŒããŸãã
ãã®é©ãã¹ãåäœã¯ã ãã®ã³ã° ïŒç¹å¥ãªãã¡ã€ã«ïŒãšããã£ã¹ã¯ãžã®å€æŽãåæããããã®ç¬åµçãªã¡ã«ããºã ã«ãã£ãŠå®çŸãããŸãã
ããŒã¿ããŒã¹å ã®ããŒã¿ãç°¡åã«æŽæ°ããã«ã¯ã次ã®ããã«ããŸãã
-SQLiteã¯ãããŒã¿ããŒã¹ãå€æŽããåã«ãããŒã¿ããŒã¹ããå€æŽããããŒãžãå¥ã®ãã¡ã€ã«ïŒãã°ïŒã«ä¿åããŸããã€ãŸããåã«ããã«ã³ããŒããŸãã
-ããŒãžã®ã³ããŒãäœæãããããšã確èªãããšãSQLiteã¯ããŒã¿ããŒã¹ã®å€æŽãéå§ããŸãã
-ããŒã¿ããŒã¹ãžã®ãã¹ãŠã®å€æŽãããã£ã¹ã¯ã«å°éãããããŒã¿ããŒã¹ãå®å šã«ãªã£ãããšã確èªãããšãSQLiteã¯ãã°ãæ¶å»ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã¡ã«ããºã ã®ååæ§ã¯ããã§è©³çŽ°ã«èª¬æãããŸã ã
SQLiteãããŒã¿ããŒã¹ãžã®æ¥ç¶ãéãããã°ãæ¢ã«ååšããããšã確èªãããšãããŒã¿ããŒã¹ãäžå®å šãªç¶æ ã«ããããšãèªèããæåŸã®ãã©ã³ã¶ã¯ã·ã§ã³ãèªåçã«ããŒã«ããã¯ããŸãã
ã€ãŸããå®éã«ã¯ãé害åŸã®ããŒã¿ããŒã¹å埩ã¡ã«ããºã ã¯SQLiteã«çµã¿èŸŒãŸããŠããããŠãŒã¶ãŒã«ãšã£ãŠã·ãŒã ã¬ã¹ã«æ©èœããŸãã
ããã©ã«ãã§ã¯ããã°ã¯åé€ã¢ãŒãã«ãªã£ãŠããŸãã
PRAGMA journal_mode = DELETE
ããã¯ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºããåŸã«ãã°ãã¡ã€ã«ãåé€ãããããšãæå³ããŸãã ãã®ã¢ãŒãã§ãã°ãã¡ã€ã«ããããšããäºå®ã¯ãSQLiteã«ãšã£ãŠãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããŠããªãããšãæå³ããããŒã¿ããŒã¹ã埩å ããå¿ èŠããããŸãã ãã°ãã¡ã€ã«ã«ã¯ãã-journalããè¿œå ãããããŒã¿ããŒã¹ãã¡ã€ã«ã®ååãä»ããããŸãã
TRUNCATEã¢ãŒãã§ã¯ããã°ãã¡ã€ã«ã¯ãŒãã«åãæšãŠãããŸãïŒäžéšã®ã·ã¹ãã ã§ã¯ããã¡ã€ã«ãåé€ãããããéãåäœããŸãïŒã
PERSISTã¢ãŒãã§ã¯ããã°ãã¡ã€ã«ã®å é ããŒãã§è©°ãŸã£ãŠããŸãïŒãµã€ãºã¯å€æŽããããå€ãã®ã¹ããŒã¹ãå æããŸãïŒã
MEMORYã¢ãŒãã§ã¯ããã°ãã¡ã€ã«ã¯ã¡ã¢ãªã«ä¿æãããããã¯è¿ éã«æ©èœããŸãããé害ãçºçããå Žåã®ããŒã¿ããŒã¹ã®å埩ãä¿èšŒããŸããïŒãã£ã¹ã¯äžã«ããŒã¿ã®ã³ããŒã¯ãããŸããïŒã
ãŸãã¯ããžã£ãŒãã«ãå®å šã«ç¡å¹ã«ããããšãã§ããŸãïŒ PRAGMA journal_mode = OFF ïŒã ãã®ç¶æ³ã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã«ããã¯ïŒ ROLLBACKã³ãã³ãïŒãåäœãåæ¢ããããã°ã©ã ãã¯ã©ãã·ã¥ããå Žåã«ããŒã¿ããŒã¹ãç Žæããå¯èœæ§ããããŸãã
ã¡ã¢ãªå ã®ããŒã¿ããŒã¹ã®å Žåããã°ã¢ãŒãã¯MEMORYãŸãã¯OFFã®ããããã®ã¿ã§ãã
å°ãæ»ããŸãããã SQLiteã¯ãããŒã¿ããŒã¹ãåžžã«å®å šã§ããããšãã©ã®ããã«ã確èªãããŸããïŒ
ææ°ã®ã·ã¹ãã ã§ã¯ãå·§åŠãªãã£ãã·ã³ã°ã䜿çšããŠããã©ãŒãã³ã¹ãåäžãããã£ã¹ã¯ãžã®æžã蟌ã¿ãé ããããšããããŸãã
SQLiteãããŒã¿ããŒã¹ãžã®æžã蟌ã¿ãçµäºãããã°ãã¡ã€ã«ãæ¶å»ããŠãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããããšã瀺ããããšããŸãã
ããŒã¿ããŒã¹ãæŽæ°ãããåã«ãã¡ã€ã«ãæ¶å»ãããå Žåã¯ã©ããªããŸããïŒ
ãã®æéäžã«é»æºããªãã«ãªããšããã°ã¯ããã«ãªããããŒã¿ããŒã¹ã¯ãŸã å®å šã§ã¯ãããŸãã-ããŒã¿æ倱ïŒ
ã€ãŸããç¬åµçãªå€æŽã³ãããã¡ã«ããºã ã¯ããã£ã¹ã¯ã·ã¹ãã ãšOSããã®ããã€ãã®ä¿èšŒã«äŸåããå¿ èŠããããŸãã
PRAGMAåæã¯ãããã©ãã€ã¢ãSQLiteã®åºŠåãããã®å¹æã«èšå®ããŸãã
OFFã¢ãŒãïŒãŸãã¯0ïŒã¯ãSQLiteã¯ããŒã¿ãOSã«è»¢éããçŽåŸïŒã€ãŸãã察å¿ããOS APIãåŒã³åºããçŽåŸïŒã«ãã£ã¹ã¯äžã§åºå®ãããŠãããšèŠãªããŸãã
ã€ãŸããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããå Žå ïŒOSãåŒãç¶ãåäœããããïŒã«ã¯æŽåæ§ãä¿èšŒãããŸã ããOSã®ã¯ã©ãã·ã¥ãåé»ã®å Žåã«ã¯ä¿èšŒãããŸããã
NORMALåæã¢ãŒãïŒãŸãã¯1ïŒã¯ãOSã¯ã©ãã·ã¥æããã³ã»ãŒãã¹ãŠã®åé»æã®æŽåæ§ãä¿èšŒããŸãã é»åãæãäžé©åãªç¬éã«å€±ããããšãããŒã¹ãå£åããå¯èœæ§ããŒãã§ã¯ãããŸããã ããã¯ãããã©ãŒãã³ã¹ãšä¿¡é Œæ§ã®ç¹ã§ãäžçš®ã®äžçšåºŠã®åŠ¥åã¢ãŒãã§ãã
FULLã¢ãŒãã¯ããã€ã§ãã©ãã§ããã©ããªäºæ ã§ãå®å šæ§ãä¿èšŒããŸãã ããããç¹å®ã®å Žæã§ã¯æåŸ ã®äžæåæ¢ãè¡ãããããããã¡ããããããã£ãããšåäœããŸãã ãããŠããããããã©ã«ãã®ã¢ãŒãã§ãã
ãããã£ãŠã WALã®ãããªéèªã®ãããã¯ã®ã¿ãæªå°éã®ãŸãŸã§ããã
WALãã°ã¢ãŒã
ããã©ã«ãã§ã¯ãããŒã¿ããŒã¹ãã°ã¢ãŒãã¯åžžã«DELETEã« ãæ»ããŸããã ããŒã¿ããŒã¹ãžã®æ¥ç¶ãéããã¢ãŒããPERSISTã«èšå®ãããšããŸãã ããŒã¿ãå€æŽããæ¥ç¶ãéããŸããã
ãã£ã¹ã¯äžã«ãã°ãã¡ã€ã«ããããŸãïŒæåã¯ãŒãã§ãïŒã
ããŒã¿ããŒã¹ãžã®æ¥ç¶ãå床éããŸãã ãã®æ¥ç¶ã§ãã°ã¢ãŒããèšå®ããªãå Žåãå床DELETEã§æ©èœããŸãã ããŒã¿ãæŽæ°ãããšããã«ããã©ã³ã¶ã¯ã·ã§ã³ã³ãããã¡ã«ããºã ã«ãã£ãŠãã°ãã¡ã€ã«ãæ¶å»ãããŸãã
WALãã°ã¢ãŒãã®åäœã¯ç°ãªããŸã-ãæ°žç¶çãã§ãã ããŒã¿ããŒã¹ãWALã¢ãŒãã«ãããšããã«ãããŒã¿ããŒã¹ãå¥ã®ãã°ã¢ãŒãã«æ確ã«å€æŽããããŸã§ããã®ã¢ãŒãã®ãŸãŸã«ãªããŸãã
ãªããããå¿ èŠãªã®ã§ããïŒ
åœåãSQLiteã¯çµã¿èŸŒã¿ããŒã¿ããŒã¹ãšããŠèšèšãããŸããã ããŒã¿ãžã®åæã¢ã¯ã»ã¹ãå ±æããã¢ãŒããã¯ãã£ã¯åºæ¬çãªãã®ã§ãããåæã«ãè€æ°ã®æ¥ç¶ãããŒã¿ããŒã¹ãèªã¿åãããšãã§ããŸãããäžåºŠã«æžã蟌ã¿ã§ããæ¥ç¶ã¯1ã€ã ãã§ãã ããã¯ãå°ãªããšããæžã蟌ã¿æ¥ç¶ãããŒã¿ããŒã¹ããªãŒããŒããããªãªãŒã¹ããããã®ãåŸ ã£ãŠããããšãæå³ããŸãã ãããžãŒãããŒã¿ããŒã¹ã«æžã蟌ãããšãããšãã¢ããªã±ãŒã·ã§ã³ã¯SQLITE_BUSYãšã©ãŒãåãåããŸãïŒ SQLITE_LOCKEDãšæ··åããªãã§ãã ãã ïŒïŒã ãã¡ã€ã«ããã¯APIãä»ããŠã¢ã¯ã»ã¹ãå ±æããããã®ãã®ã¡ã«ããºã ãå®çŸãããŸãïŒãããã¯ãŒã¯ãã©ã€ãã§ã¯ããŸãæ©èœããªããããSQLiteã¯æšå¥šãããŸããã 詳现
WALïŒ å è¡æžã蟌ã¿ãã®ã³ã° ïŒã¢ãŒãã§ã¯ãããŒã¿ããŒã¹ã®ããªãŒããŒããšããŒã¿ããŒã¹ã®ãã©ã€ã¿ãŒããäºãã«å¹²æžããããšã¯ãªããªããŸãããã€ãŸããèªã¿åãäžã«ããŒã¿ãå€æŽã§ããŸãã èŠããã«ãããã¯ãã¹ãŠãååšãã倧èŠæš¡ã§æ·±å»ãªDBMSãžã®äžæ©ã§ãã ãŸããWALã®SQLiteã®æ¹ãé«éã§ãããšäž»åŒµãããŠããŸãã
ããããæ¬ ç¹ããããŸãïŒ
-OSããã®è¿œå ã®nishtyakiãå¿ èŠã§ãïŒunixãšWindowsã«ã¯ãããã®nishtyakiããããŸãïŒã
-ããŒã¿ããŒã¹ã¯ããã€ãã®ãã¡ã€ã«ïŒãã¡ã€ã«"XXX-wal"ããã³"XXX-shm" ïŒãåããŸãã
-倧èŠæš¡ãªãã©ã³ã¶ã¯ã·ã§ã³ã§ã¯ããŸãæ©èœããŸããïŒæ¡ä»¶ä»ãã§ããã©ã³ã¶ã¯ã·ã§ã³ã50 MBãè¶ ããå ŽåïŒã
-ãã®ãããªããŒã¿ããŒã¹ãèªã¿åãå°çšã¢ãŒãã§éãããšã¯ã§ããŸããã
-è¿œå ã®ãã§ãã¯ãã€ã³ãæäœãçºçããŸãã
å®éãWALã¢ãŒãã§ã¯ãããŒã¿ããŒã¹ããŒã¿ã¯ããŒã¿ããŒã¹ãšãã°ãã¡ã€ã«ã®éã§å ±æãããŸãã ãã§ãã¯ãã€ã³ãæäœã¯ãããŒã¿ãããŒã¿ããŒã¹ã«è»¢éããŸãã ããã©ã«ãã§ã¯ããã°ã1000ããŒã¿ããŒã¹ããŒãžã䜿çšããŠããå Žåãããã¯èªåçã«è¡ãããŸãã
ã€ãŸããé«éãªCOMMITããããçªç¶COMMITãããã«ã€ããŠèãããã§ãã¯ãã€ã³ããéå§ããŸããã ãã®åäœãæãŸãããªãå Žåã¯ãæåã§ãã§ãã¯ãã€ã³ããå®è¡ã§ããŸãïŒãã¹ãŠãèœã¡çããŠããå ŽåïŒãããã¯å¥ã®ããã»ã¹ã§å®è¡ã§ããŸãã
å¶é
SQLiteã¯ããã®å°ååã«ãããããããå®éã«ã¯ãã£ãŒã«ããããŒãã«ããŸãã¯ããŒã¿ããŒã¹ã®ãµã€ãºã«æ·±å»ãªå¶éã課ããŠããŸããã
ããã©ã«ãã§ã¯ãBLOBãŸãã¯æååå€ã¯1 GBãå æã§ããããã¯1ã¬ã³ãŒãã®ãµã€ãºå¶éãšåãã§ãïŒ2 ^ 31-1ãSQLITE_MAX_LENGTHãã©ã¡ãŒã¿ãŒã«äžããããšãã§ããŸãïŒã
åæ°ïŒ2000ïŒ32767ãŸã§äžããããšãã§ããŸããSQLITE_MAX_COLUMNïŒã
SQLã¹ããŒãã¡ã³ãã®ãµã€ãºïŒ1 MBïŒ1073741824ãã€ããSQLITE_MAX_SQL_LENGTHïŒã
åæçµåïŒ64ããŒãã«ã
æ¥ç¶ã«ããŒã¹ãæ¥ç¶ããŸãïŒ10ïŒæ倧62ãSQLITE_MAX_ATTACHEDïŒ
ããŒã¿ããŒã¹ã®æ倧ããŒãžæ°ïŒ1073741823ïŒæ倧2147483646ãSQLITE_MAX_PAGE_COUNTïŒã
ããŒãžãµã€ãºã65,636ãã€ãã«èšå®ããå Žåãæ倧ããŒã¿ããŒã¹ãµã€ãºã¯çŽ14ãã©ãã€ãã«ãªããŸãã
ããŒãã«å ã®ãšã³ããªã®æ倧æ°ã¯2 ^ 64-1ã§ãããå®éã«ã¯ããã¡ããããµã€ãºå¶éã¯æ©ããªããŸãã
詳现sqlite.org/limits.html
UDPïŒSQLite Optimization LinksïŒ 1 2 android-1 android-2
ç¶ã