.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "OVSQLITE 5" .TH OVSQLITE 5 "2024-05-19" "INN 2.7.2" "InterNetNews Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" ovsqlite \- SQLite\-based overview storage method for INN .SH "DESCRIPTION" .IX Header "DESCRIPTION" This method uses SQLite to store overview data. It requires version 3.8.2 or later of the SQLite library (3.20.0+ recommended). .PP SQLite source, documentation, etc. are available at . Ones of the stated goals of the SQLite file format are long-term stability and compatibility, which make that storage method a perfect choice to store overview data. .PP Only one protocol version of the ovsqlite storage method currently exists, implemented since \s-1INN\s0\ 2.7.0. .PP This method comes with a support utility (\fBovsqlite-util\fR) and a Perl module (\f(CW\*(C`INN::ovsqlite_client\*(C'\fR) which permit accessing and manipulating overview information. See their manual pages for more details about their possibilities. .SH "INSTALLATION" .IX Header "INSTALLATION" The configure script will automatically enable ovsqlite support if it finds the SQLite library. If the library isn't installed in a standard location, you may have to specify the \fB\-\-with\-sqlite3\fR option to help configure find it. For complicated cases, you can use separate \&\fB\-\-with\-sqlite3\-include\fR and \fB\-\-with\-sqlite3\-lib\fR options. Finally, if you \fIdon't\fR want ovsqlite support even when your system has the SQLite library, you can use the \fB\-\-without\-sqlite3\fR option. .PP If you have a recent Linux installation, SQLite is most likely already installed. You may have to install a separate package with a name similar to \f(CW\*(C`libsqlite3\-dev\*(C'\fR to get the required header files. .PP Plan on needing at least 0.93\ \s-1KB\s0 for every article in your spool (not counting crossposts). So, if you have 5 million articles, you'll need at least 4.65\ \s-1GB\s0 of disk space for ovsqlite. With compression enabled, this estimate changes to 0.4\ \s-1KB\s0 per article, so you'll need at least 2\ \s-1GB\s0 of disk space for 5 million articles. Plus, you'll need additional space for transaction logs (a few \s-1MB\s0). .SH "CONFIGURATION" .IX Header "CONFIGURATION" To select ovsqlite as your overview method, set the \fIovmethod\fR parameter in \fIinn.conf\fR to \f(CW\*(C`ovsqlite\*(C'\fR. The database file will be created in the directory specified by the \fIpathoverview\fR parameter in \fIinn.conf\fR. Restart \s-1INN\s0 to take the change into account (after having rebuilt your existing overview with \fBmakehistory\fR, if needed). .PP These additional parameters are read from the \fIovsqlite.conf\fR configuration file: .IP "\fIcachesize\fR" 4 .IX Item "cachesize" The SQLite in-memory page cache size in kilobytes. The default value is left up to the SQLite library and seems to be stable at 2000\ \s-1KB.\s0 .IP "\fIcompress\fR" 4 .IX Item "compress" If \s-1INN\s0 was built with zlib support and this parameter is true, ovsqlite will compress overview records whenever this saves space. This parameter is consulted only when creating a new database. Enabling compression saves about 55\ % of disk space on standard overview data. The default value is false. .IP "\fIpagesize\fR" 4 .IX Item "pagesize" The SQLite database page size in bytes. Must be a power of 2, minimum 512, maximum 65536. Appropriate values include the virtual memory page size and the filesystem allocation block size. This parameter is consulted only when creating a new database. The default value is left up to the SQLite library and varies between versions. .IP "\fItransrowlimit\fR" 4 .IX Item "transrowlimit" The maximum number of article rows that can be inserted or deleted in a single \s-1SQL\s0 transaction. The default value is 10000 articles. .IP "\fItranstimelimit\fR" 4 .IX Item "transtimelimit" The maximum \s-1SQL\s0 transaction lifetime in seconds. The default value is 10 seconds. .PP A transaction occurs every \fItransrowlimit\fR articles or \fItranstimelimit\fR seconds, whichever is smaller. You are encouraged to keep the default value for row limits and, instead, adjust the time limit according to how many articles your news server usually accepts per second during normal operation (you can find statistics about incoming articles in your daily Usenet reports). Inserting or deleting a database row within a transaction is very fast whereas committing a transaction is slow, especially on rotating storage. Setting transaction limits too low leads to poor performance. When rebuilding overview data, it may be worth temporarily raising these values on systems with slow \s-1CPU\s0 or rotating storage (for instance, multiply by 10 the default values). Performance won't change much on fast systems. .SH "RUNNING" .IX Header "RUNNING" All overview database access goes through the \fBovsqlite-server\fR daemon. For ordinary operation, \fBrc.news\fR will start and stop it automatically. If you want to touch the overview database while \fBinnd\fR isn't running, you'll have to start \fBovsqlite-server\fR manually first. See \fBovsqlite\-server\fR\|(8). .SH "HISTORY" .IX Header "HISTORY" Initial implementation of ovsqlite written by Bo Lindbergh <2bfjdsla52kztwejndzdstsxl9athp@gmail.com> for InterNetNews. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBINN::ovsqlite_client\fR\|(3pm), \fBinn.conf\fR\|(5), \fBmakehistory\fR\|(8), \fBovsqlite\-server\fR\|(8), \&\fBovsqlite\-util\fR\|(8), \fBrc.news\fR\|(8).