From 9b4fd83e8f88858a7a8d440b129397561fb1fcac Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Tue, 10 May 2022 19:07:02 +1000 Subject: Split nodes table into nodes and edges This noticeably slowed server responses. Responses to a client's initial node query slowed from 20-30ms to 200-300ms. --- backend/server.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'backend/server.py') diff --git a/backend/server.py b/backend/server.py index 8e4a90f..f0292aa 100755 --- a/backend/server.py +++ b/backend/server.py @@ -28,25 +28,31 @@ dbCon.enable_load_extension(True) dbCon.load_extension('./data/spellfix') # Some functions def lookupNodes(names): + # Get node info nodeObjs = {} cur = dbCon.cursor() - # Get node info - query = "SELECT name, children, parent, tips, p_support FROM nodes WHERE" \ - " name IN ({})".format(",".join(["?"] * len(names))) - namesForImgs = [] - firstSubnames = {} - secondSubnames = {} - for row in cur.execute(query, names): - name = row[0] - nodeObj = { - "children": json.loads(row[1]), - "parent": None if row[2] == "" else row[2], - "tips": row[3], - "pSupport": True if row[4] == 1 else False, + query = "SELECT name, tips from nodes WHERE name IN ({})".format(",".join(["?"] * len(names))) + for (nodeName, tips) in cur.execute(query, names): + nodeObjs[nodeName] = { + "children": [], + "parent": None, + "tips": tips, + "pSupport": False, "commonName": None, "imgName": None, } - # Check for image file + query = "SELECT node, child FROM edges WHERE node IN ({})".format(",".join(["?"] * len(names))) + for (nodeName, childName) in cur.execute(query, names): + nodeObjs[nodeName]["children"].append(childName) + query = "SELECT node, child, p_support FROM edges WHERE child IN ({})".format(",".join(["?"] * len(names))) + for (nodeName, childName, pSupport) in cur.execute(query, names): + nodeObjs[childName]["parent"] = nodeName + nodeObjs[childName]["pSupport"] = pSupport + # Get names for image files + namesForImgs = [] + firstSubnames = {} + secondSubnames = {} + for (name, nodeObj) in nodeObjs.items(): match = re.fullmatch(r"\[(.+) \+ (.+)]", name) if match == None: namesForImgs.append(name) @@ -56,8 +62,6 @@ def lookupNodes(names): namesForImgs.extend([name1, name2]) firstSubnames[name1] = name secondSubnames[name2] = name - # Add node object - nodeObjs[name] = nodeObj # Get image names query = "SELECT name, id FROM eol_ids WHERE" \ " name IN ({})".format(",".join(["?"] * len(namesForImgs))) -- cgit v1.2.3