Forry for my total lazyness. This patch works for me and makes some
small things better to my viewpoint. I discovered that udmsearch deletes
records in mutli-crc mode from all those ndictxx tables one by one. If
you do such definition in MySQL as shown below, mnogosearch can delete
from all tables with single DELETE command:
CREATE TABLE `merged_ndict` (
`url_id` mediumint(8) unsigned NOT NULL default '0',
`word_id` int(11) default NULL,
`intag` int(11) default NULL,
KEY `url_id` (`url_id`),
KEY `word_id` (`word_id`)
) TYPE=MRG_MyISAM
UNION=(ndict2,ndict3,ndict4,ndict5,ndict6,ndict7,ndict8,ndict9,ndict10,ndict11,ndict12,ndict16,ndict32)
And there is a patch attached for mnogosearch too (sorry, it is
reversed). This patch eliminates those extra DELETEs and additionally
speeds up some MySQL INSERTs by adding "DELAYED" keyword to them.
T�nu
diff -urN mnogosearch-3.1.16/src/sql.c mnogosearch-3.1.17/src/sql.c
--- mnogosearch-3.1.16/src/sql.c Tue Jul 3 06:57:27 2001
+++ mnogosearch-3.1.17/src/sql.c Wed Jun 13 13:56:46 2001
@@ -2165,10 +2165,6 @@
}
break;
case UDM_DBMODE_MULTI_CRC:
- sprintf(qbuf,"DELETE FROM merged_ndict WHERE url_id in (%d)",url_id);
- sql_query(Indexer,qbuf);
- if(UdmDBErrorCode(Indexer->db)) return (IND_ERROR);
- /*
for(i=MINDICT;i<MAXDICT;i++){
if(last!=DICTNUM(i)){
#ifdef HAVE_ORACLE8
@@ -2182,7 +2178,7 @@
if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
last=DICTNUM(i);
}
- }*/
+ }
break;
case UDM_DBMODE_SINGLE_CRC:
sprintf(qbuf,"DELETE FROM ndict WHERE url_id=%d",url_id);
@@ -2217,10 +2213,6 @@
strcpy(tablename,"ndict");
}
- sprintf(qbuf,"DELETE FROM merged_ndict WHERE url_id in (%d)",url_id);
- sql_query(Indexer,qbuf);
- if(UdmDBErrorCode(Indexer->db)) return (IND_ERROR);
-
for(n=0;n<NDICTS;n++){
if(prev_dictlen==dictlen[n])continue;
prev_dictlen=dictlen[n];
@@ -2243,9 +2235,9 @@
}
/* Delete old words */
- /* sprintf(qbuf,"DELETE FROM %s WHERE url_id=%d",tbl_nm,url_id);
+ sprintf(qbuf,"DELETE FROM %s WHERE url_id=%d",tbl_nm,url_id);
sql_query(Indexer,qbuf);
- if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);*/
+ if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
/* Insert new word */
if(Indexer->Conf->DBType==UDM_DB_MYSQL){
@@ -2255,9 +2247,9 @@
qb=(char*)malloc(mlen);
if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
- sprintf(qb,"INSERT DELAYED INTO %s (url_id,word,intag)
VALUES ",tbl_nm);
+ sprintf(qb,"INSERT INTO %s (url_id,word,intag) VALUES
+",tbl_nm);
}else{
- sprintf(qb,"INSERT DELAYED INTO %s
(url_id,word_id,intag) VALUES ",tbl_nm);
+ sprintf(qb,"INSERT INTO %s (url_id,word_id,intag)
+VALUES ",tbl_nm);
}
qe=qb+strlen(qb);
@@ -2289,9 +2281,9 @@
}
/* Init query again */
if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
- sprintf(qb,"INSERT DELAYED
INTO %s (url_id,word,intag) VALUES ",tbl_nm);
+ sprintf(qb,"INSERT INTO %s
+(url_id,word,intag) VALUES ",tbl_nm);
}else{
- sprintf(qb,"INSERT DELAYED
INTO %s (url_id,word_id,intag) VALUES ",tbl_nm);
+ sprintf(qb,"INSERT INTO %s
+(url_id,word_id,intag) VALUES ",tbl_nm);
}
qe=qb+strlen(qb);
have_words = 0;
@@ -2310,9 +2302,9 @@
len=strlen(Indexer->Word[i].word);
if (Indexer->Word[i].count && (DICTNUM(len) ==
dictlen[n])){
if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
- sprintf(qbuf,"INSERT DELAYED INTO %s
(url_id,word,intag)
VALUES(%d,'%s',%d)",tbl_nm,url_id,Indexer->Word[i].word,Indexer->Word[i].count);
+ sprintf(qbuf,"INSERT INTO %s
+(url_id,word,intag)
+VALUES(%d,'%s',%d)",tbl_nm,url_id,Indexer->Word[i].word,Indexer->Word[i].count);
}else{
- sprintf(qbuf,"INSERT DELAYD INTO %s
(url_id,word_id,intag)
VALUES(%d,%d,%d)",tbl_nm,url_id,UdmStrCRC32(Indexer->Word[i].word),Indexer->Word[i].count);
+ sprintf(qbuf,"INSERT INTO %s
+(url_id,word_id,intag)
+VALUES(%d,%d,%d)",tbl_nm,url_id,UdmStrCRC32(Indexer->Word[i].word),Indexer->Word[i].count);
}
sql_query(Indexer,qbuf);
if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
@@ -3637,10 +3629,6 @@
}
break;
case UDM_DBMODE_MULTI_CRC:
- sprintf(qbuf,"DELETE FROM merged_ndict WHERE
url_id in (%s)",urlin);
- sql_query(Indexer,qbuf);
- if(UdmDBErrorCode(Indexer->db)) return
(IND_ERROR);
- /*
for(i=MINDICT;i<MAXDICT;i++){
if(last!=DICTNUM(i)){
sprintf(qbuf,"DELETE FROM
ndict%d WHERE url_id in (%s)",
@@ -3649,7 +3637,7 @@
if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
last=DICTNUM(i);
}
- }*/
+ }
break;
case UDM_DBMODE_CACHE: