Had similar issue a few years ago; we were using the SQLite3.exe. We recompiled the exe as 64 bit which allowed it to use more than 4 GB of ram, loaded the machine with as much memory as we could. Voila, super fast processing.
Can the Python libraries be made 64 bit some how? On Thu, Nov 30, 2017 at 7:01 PM Keith Medcalf <kmedc...@dessus.com> wrote: > > Is there an index on pos where ppos is the left-most field (or the only > field) in the index? > What is the column affinity of ppos? Of the fiold you are passing as a > parameter? > Is ppos unique? > > If you CREATE [UNIQUE] INDEX searchindex ON pos (ppos, pnum); > > then your query can be satisfied only using the searchindex covering index. > > If there is not an index on ppos, then you will be wasting time recreating > the index for each query. > > You will probably need to increase the cache size beyond the paltry > default in order for the entire btree structures to be cached in RAM -- you > probably want to make it as big as you can. > > --- > The fact that there's a Highway to Hell but only a Stairway to Heaven says > a lot about anticipated traffic volume. > > > >-----Original Message----- > >From: sqlite-users [mailto:sqlite-users- > >boun...@mailinglists.sqlite.org] On Behalf Of Kevin O'Gorman > >Sent: Saturday, 25 November, 2017 20:14 > >To: sqlite-users > >Subject: [sqlite] Simple read-only program very slow > > > >I'm pretty new at SQLite, so this may seem obvious to you. Be kind. > >I'm using Python on Ubuntu Linux 16.04 LTS, and the sqlite that is > >built > >into Python. The database > >is using WAL. > > > >I've got a database of some 100 million records, and a file of just > >over > >300 thousand that I want represented in it. I wanted to check how > >much > >difference it was going to make, so I wrote a super > >simple program to the read the file and count how many records are > >already > >there. I got impatient waiting for it so I killed the process and > >added an > >output of one dot (".") per 1000 records. It went very fast for what > >I > >estimate was around 200 dots and hit a wall. It made progress, but > >very > >very slowly. > > > >So I killed it again and added a commit() call every time it output a > >dot. > >It didn't hit a wall, just some rough road (that is, it slowed down > >at > >about the same spot but not nearly so drastically). > > > >The code makes to changes to the database at all. Why does commit() > >make a > >difference? What else should I learn from this? > > > >The field being used for the lookup has an index. > > > >++ kevin > > > >Code follows: > >#!/usr/bin/env python3 > >"""Count the number of records that represent rows in the database > >'pos' > >table. > >The database is not modified. > > > > Last Modified: Sat Nov 25 18:56:49 PST 2017 > >""" > > > >import os.path # > >https://docs.python.org/3.5/library/os.path.html > >import sys # > >https://docs.python.org/3.5/library/sys.html > >import argparse # > >https://docs.python.org/3.5/library/argparse.html > >import sqlite3 # > >https://docs.python.org/3.5/library/sqlite3.html > >import re # https://docs.python.org/3.5/library/re.html > > > ># from /usr/local/lib/python3.5/dist-packages > >import qcreate > >from qerror import * > >import myparser > > > >if __name__ == '__main__': > > parser = argparse.ArgumentParser(description="""A program to read > >positions and count how many are > > in the database""",) > > parser.add_argument("--dbname", default=None, > > help="name of the database to work on (overrides > >qubic.ini > >file)") > > parser.add_argument("file", nargs='?', > >type=argparse.FileType('r'), > >default=sys.stdin, > > help="file containing the qsearch results (default > >stdin)") > > args=parser.parse_args() > > infile = args.file > > > > if args.dbname is None: > > here=os.path.split(os.path.realpath('.'))[1] > > for confdir in > >".",os.path.join(os.environ["HOME"],".config"),"/etc/xdg/": > > f = os.path.join(confdir, "qubic.ini") > > if os.path.exists(f): > > args.dbname = myparser.parse(f, here, "dbname") > > if args.dbname is not None: > > break > > if args.dbname is None: > > print(" *** ERROR: no database name provided and none > >found in > >qubic.ini files") > > sys.exit(1) > > > > present = missing = lines = 0 > > with sqlite3.connect(args.dbname) as conn: > > for line in infile: > > fields = line.split() > > pos = fields[0] > > if len(pos) != 64: # Important test to catch grep without > >--no-filename > > raise InputError(" ERROR: input line has wrong-sized > >position: " + line) > > > > pnum = None > > for row in conn.execute(""" > > SELECT pnum > > FROM pos > > WHERE ppos=? > > """,(pos,)): > > pnum = row[0] > > break > > if pnum is None: > > missing += 1 > > else: > > present += 1 > > lines += 1 > > if lines % 1000 == 0: > > print(".",flush=True,end="") > > conn.commit() > > print("there were",present,"records on file and",missing," were > >missing") > > print("out of a total of", lines, "records.") > > > > > > > >-- > >word of the year: *kakistocracy* > >_______________________________________________ > >sqlite-users mailing list > >sqlite-users@mailinglists.sqlite.org > >http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users