Table of Contents
In-depth study of keyword matching projects (2) - The introduction of the idea of ​​sub-tables, in-depth study of keywords
Home Backend Development PHP Tutorial In-depth study of keyword matching projects (2) - introduction of the idea of ​​sub-tables, in-depth study of keywords_PHP tutorial

In-depth study of keyword matching projects (2) - introduction of the idea of ​​sub-tables, in-depth study of keywords_PHP tutorial

Jul 13, 2016 am 10:10 AM
excel

In-depth study of keyword matching projects (2) - The introduction of the idea of ​​sub-tables, in-depth study of keywords

(2) The introduction of the idea of ​​sub-tables

Recent articles: 1) Architecture application of high concurrent data collection (Redis application)

2) Highly available data collection platform (how to play with 3 languages ​​php+.net+aauto)

Teach you step by step how to do a keyword matching projectThis part has basically been completed. In-depth research is to analyze the performance of the system and must be done under the stimulation of some environments. Some changes.

Teach you step by step how to do keyword matching project: Teach you step by step how to do keyword matching project (search engine)----Day 1~Teach you step by step how to do keyword matching project (search engine)--- - Day 22 (22 articles in total)

In-depth research: The previous section talked about in-depth research on keyword matching projects - the introduction of filters.

Each article will be divided into causes of the problem, solutions and some necessary implementation plans.

This article officially begins.

Antecedents of the problem

With the explosive growth of automatically collected data, the capacity of the vocabulary database is booming, from a few W data to millions of data, Xiao Shuai Shuai looks at the queries in the database and feels more and more Nothing can be done.

In addition, what Xiao Ding Ding often says to Xiao Shuai Shuai the most is: When can I choose words faster? Every time I wait for a long time and there is no response, I am really anxious to death.

Little handsome is also more anxious, and my heart is haggard. I really feel that this is the challenge. Xiao Shuaishuai had no choice but to continue to find the boss, asking him to reward him with a clever trick.

Boss Yu patted Xiao Shuaishuai on the shoulder: Young man, you know how difficult the project is!

Xiao Shuaishuai replied: Don’t ridicule me, I have felt it deeply, and I think my heart may not be able to bear it anymore.

Boss Yu: If you can’t bear this, I guess there will be more for you in the future.

Little handsome: big brother, let alone these virtual behaviors, hurry up the solution.

Boss Yu: Why are you in a hurry? Things cannot be rushed. Come here and I will give you a clear path.

“Does each baby have a category attribute? How many words in these millions of data really belong to this category? Assuming that we only use the vocabulary of this category, can our project continue to be stable?”

Solution

According to certain business needs, we can split the data table vertically or horizontally, which can effectively optimize performance.

Vertical segmentation is also called column segmentation. It splits uncommon columns or long fields to ensure that entities are in a relatively applicable state. Common ones include one-to-one relationships.

Horizontal splitting, also called row splitting, splits data records according to a certain business and stores them in different tables. Common table splitting operations include date splitting.

This case uses horizontal segmentation to split the data into categories.

Implementation Plan

In order not to change the structure of the data table, we designed it this way. We distinguish which data table the project uses according to the table name. The changes resulting from this are relatively few. We only need to change the code slightly to solve it. This is a very frustrating thing.

Modify the Keyword code and add data sources.

<?<span>php
</span><span>define</span>('DATABASE_HOST','127.0.0.1'<span>);
</span><span>define</span>('DATABASE_USER','xiaoshuaishuai'<span>);
</span><span>define</span>('DATABASE__PASSWORD','xiaoshuaishuai'<span>);
</span><span>define</span>('DATABASE_CHARSET','utf-8'<span>);

</span><span>class</span><span> Keyword {

    </span><span>public</span> <span>$word</span><span>;

    </span><span>public</span> <span>static</span> <span>$conn</span> = <span>null</span><span>;

    </span><span>public</span> <span>function</span><span> getDbConn(){
        </span><span>if</span>(self::<span>$conn</span> == <span>null</span><span>){
            self</span>::<span>$conn</span> = <span>mysql_connect</span>(DATABASE_HOST,DATABASE_USER,<span>DATABASE__PASSWORD);
            </span><span>mysql_query</span>("SET NAMES '".DATABASE_CHARSET."'",self::<span>$conn</span><span>);
            </span><span>mysql_select_db</span>("dict",self::<span>$conn</span><span>);
            </span><span>return</span> self::<span>$conn</span><span>;
        }
        </span><span>return</span> self::<span>$conn</span><span>;
    }


    </span><span>public</span> <span>function</span><span> save(){

        </span><span>$sql</span> = "insert into keywords(word) values ('<span>$this</span>->word')"<span>;
        </span><span>return</span> <span>mysql_query</span>(<span>$sql</span>,<span>$this</span>-><span>getDbConn());
    }

    </span><span>public</span> <span>static</span> <span>function</span> getWordsSource(<span>$cid</span>,<span>$limit</span>=0,<span>$offset</span>=40<span>){
        </span><span>$sql</span> = "SELECT * FROM keywords_<span>$cid</span> LIMIT <span>$limit</span>,<span>$ffset</span>"<span>;
        </span><span>return</span> DB::MakeArray(<span>$sql</span><span>);
    }

    </span><span>public</span> <span>static</span> <span>function</span> getWordsCount(<span>$cid</span><span>){
          </span><span>$sql</span> = "SELECT count(*) FROM keywords_<span>$cid</span>"<span>;
        </span><span>return</span> DB::QueryScalar(<span>$sql</span><span>);

    }

}</span>
Copy after login

New QueryScalar is added to the DB class, which is used to calculate the total amount

<?<span>php
</span><span>#</span><span>@author oShine</span>
<span>define</span>('DATABASE_HOST','127.0.0.1'<span>);
</span><span>define</span>('DATABASE_USER','xiaoshuaishuai'<span>);
</span><span>define</span>('DATABASE__PASSWORD','xiaoshuaishuai'<span>);
</span><span>define</span>('DATABASE_CHARSET','utf-8'<span>);

</span><span>class</span><span> DB {

    </span><span>public</span> <span>static</span> <span>$conn</span> = <span>null</span><span>;

    </span><span>public</span> <span>static</span> <span>function</span><span> Connect(){
        </span><span>if</span>(self::<span>$conn</span> == <span>null</span><span>){
            self</span>::<span>$conn</span> = <span>mysql_connect</span>(DATABASE_HOST,DATABASE_USER,<span>DATABASE__PASSWORD);
            </span><span>mysql_query</span>("SET NAMES '".DATABASE_CHARSET."'",self::<span>$conn</span><span>);
            </span><span>mysql_select_db</span>("dict",self::<span>$conn</span><span>);
            </span><span>return</span> self::<span>$conn</span><span>;
        }
        </span><span>return</span> self::<span>$conn</span><span>;
    }

    </span><span>public</span> <span>static</span> <span>function</span> Query(<span>$sql</span><span>){
       </span><span>return</span> <span>mysql_query</span>(<span>$sql</span>,self::<span>Connect());
    }

    </span><span>public</span> <span>static</span> <span>function</span> makeArray(<span>$sql</span><span>){
        </span><span>$rs</span> = self::Query(<span>$sql</span><span>);
        </span><span>$result</span> = <span>array</span><span>();
        </span><span>while</span>(<span>$data</span> = <span>mysql_fetch_assoc</span>(<span>$rs</span><span>)){
            </span><span>$result</span>[] = <span>$data</span><span>;
        }
        </span><span>return</span> <span>$result</span><span>;
    }

    </span><span>public</span> <span>static</span> <span>function</span> QueryScalar(<span>$sql</span><span>){
         </span><span>$rs</span> = self::Query(<span>$sql</span><span>);
         </span><span>$data</span> = <span>mysql_fetch_array</span>(<span>$rs</span><span>);
         </span><span>if</span>(<span>$data</span> == <span>false</span> || <span>empty</span>(<span>$data</span>) || !<span>isset</span>(<span>$data</span>[1])) <span>return</span> 0<span>;
         </span><span>return</span> <span>$data</span>[1<span>];
    }
} </span>
Copy after login

Modify the Selector code for word selection:

<?<span>php
</span><span>#</span><span>@Filename:selector/Selector.php</span><span>
#</span><span>@Author:oshine</span>

<span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/SelectorItem.php'<span>;
</span><span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/charlist/CharList.php'<span>;
</span><span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/charlist/CharlistHandle.php'<span>;
</span><span>require_once</span> <span>dirname</span>(<span>dirname</span>(<span>__FILE__</span>)) . '/lib/Logger.php'<span>;

</span><span>class</span><span> Selector
{

    </span><span>private</span> <span>static</span> <span>$charListHandle</span> = <span>array</span><span>(
        </span>"黑名单" => "BacklistCharListHandle",
        "近义词" => "LinklistCharListHandle"<span>
    );

    </span><span>public</span> <span>static</span> <span>function</span> select(<span>$num_iid</span><span>)
    {
        </span><span>$selectorItem</span> = SelectorItem::createFromApi(<span>$num_iid</span><span>);

        Logger</span>::trace(<span>$selectorItem</span>-><span>props_name);

        </span><span>$charlist</span> = <span>new</span><span> CharList();

        </span><span>foreach</span> (self::<span>$charListHandle</span> <span>as</span> <span>$matchKey</span> => <span>$className</span><span>) {

            </span><span>$handle</span> = self::createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>);
            </span><span>$handle</span>-><span>exec</span><span>();

        }

        </span><span>$selectWords</span> = <span>array</span><span>();

        </span><span>$wordsCount</span> = Keyword::getWordsCount(selectorItem-><span>cid);
        </span><span>$offset</span> = 40<span>;
        </span><span>$page</span> =  <span>ceil</span>(<span>$wordsCount</span>/<span>$offset</span><span>);
        </span><span>for</span>(<span>$i</span>=0;<span>$i</span><=<span>$page</span>;<span>$i</span>++<span>){
            </span><span>$limit</span> = <span>$i</span>*<span>$offset</span><span>;
            </span><span>$keywords</span> = Keyword::getWordsSource(selectorItem->cid,<span>$limit</span>,<span>$offset</span><span>);
             </span><span>foreach</span> (<span>$keywords</span> <span>as</span> <span>$val</span><span>) {
                </span><span>#</span><span> code...</span>
                <span>$keywordEntity</span> = SplitterApp::<span>split</span>(<span>$val</span>["word"<span>]);
                
                    </span><span>#</span><span> code...</span>
                <span>if</span>(MacthExector::macth(<span>$keywordEntity</span>,<span>$charlist</span><span>)){
                    </span><span>$selectWords</span>[] = <span>$val</span>["word"<span>];
                }          

            }
        }

        </span><span>return</span> <span>$selectWords</span><span>;
    }

    </span><span>public</span> <span>static</span> <span>function</span> createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>)
    {
        </span><span>if</span> (<span>class_exists</span>(<span>$className</span><span>)) {
            </span><span>return</span> <span>new</span> <span>$className</span>(<span>$charlist</span>, <span>$selectorItem</span><span>);
        }
        </span><span>throw</span> <span>new</span> <span>Exception</span>("class not exists", 0<span>);
    }
}</span>
Copy after login

Summary
Xiao Shuai Shuai has learned new knowledge points. Is this a way to reward the boss? Do you also want to reward me? Please give me a thumbs up!

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/936673.htmlTechArticleIn-depth research on keyword matching projects (2) - Introduction of the idea of ​​sub-tables, in-depth research on keywords (2) Recent articles introducing table thinking: 1) Architecture application of high concurrent data collection (...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1269
29
C# Tutorial
1248
24
What should I do if the frame line disappears when printing in Excel? What should I do if the frame line disappears when printing in Excel? Mar 21, 2024 am 09:50 AM

If when opening a file that needs to be printed, we will find that the table frame line has disappeared for some reason in the print preview. When encountering such a situation, we must deal with it in time. If this also appears in your print file If you have questions like this, then join the editor to learn the following course: What should I do if the frame line disappears when printing a table in Excel? 1. Open a file that needs to be printed, as shown in the figure below. 2. Select all required content areas, as shown in the figure below. 3. Right-click the mouse and select the &quot;Format Cells&quot; option, as shown in the figure below. 4. Click the “Border” option at the top of the window, as shown in the figure below. 5. Select the thin solid line pattern in the line style on the left, as shown in the figure below. 6. Select &quot;Outer Border&quot;

How to filter more than 3 keywords at the same time in excel How to filter more than 3 keywords at the same time in excel Mar 21, 2024 pm 03:16 PM

Excel is often used to process data in daily office work, and it is often necessary to use the &quot;filter&quot; function. When we choose to perform &quot;filtering&quot; in Excel, we can only filter up to two conditions for the same column. So, do you know how to filter more than 3 keywords at the same time in Excel? Next, let me demonstrate it to you. The first method is to gradually add the conditions to the filter. If you want to filter out three qualifying details at the same time, you first need to filter out one of them step by step. At the beginning, you can first filter out employees with the surname &quot;Wang&quot; based on the conditions. Then click [OK], and then check [Add current selection to filter] in the filter results. The steps are as follows. Similarly, perform filtering separately again

How to change excel table compatibility mode to normal mode How to change excel table compatibility mode to normal mode Mar 20, 2024 pm 08:01 PM

In our daily work and study, we copy Excel files from others, open them to add content or re-edit them, and then save them. Sometimes a compatibility check dialog box will appear, which is very troublesome. I don’t know Excel software. , can it be changed to normal mode? So below, the editor will bring you detailed steps to solve this problem, let us learn together. Finally, be sure to remember to save it. 1. Open a worksheet and display an additional compatibility mode in the name of the worksheet, as shown in the figure. 2. In this worksheet, after modifying the content and saving it, the dialog box of the compatibility checker always pops up. It is very troublesome to see this page, as shown in the figure. 3. Click the Office button, click Save As, and then

How to type subscript in excel How to type subscript in excel Mar 20, 2024 am 11:31 AM

eWe often use Excel to make some data tables and the like. Sometimes when entering parameter values, we need to superscript or subscript a certain number. For example, mathematical formulas are often used. So how do you type the subscript in Excel? ?Let’s take a look at the detailed steps: 1. Superscript method: 1. First, enter a3 (3 is superscript) in Excel. 2. Select the number &quot;3&quot;, right-click and select &quot;Format Cells&quot;. 3. Click &quot;Superscript&quot; and then &quot;OK&quot;. 4. Look, the effect is like this. 2. Subscript method: 1. Similar to the superscript setting method, enter &quot;ln310&quot; (3 is the subscript) in the cell, select the number &quot;3&quot;, right-click and select &quot;Format Cells&quot;. 2. Check &quot;Subscript&quot; and click &quot;OK&quot;

How to set superscript in excel How to set superscript in excel Mar 20, 2024 pm 04:30 PM

When processing data, sometimes we encounter data that contains various symbols such as multiples, temperatures, etc. Do you know how to set superscripts in Excel? When we use Excel to process data, if we do not set superscripts, it will make it more troublesome to enter a lot of our data. Today, the editor will bring you the specific setting method of excel superscript. 1. First, let us open the Microsoft Office Excel document on the desktop and select the text that needs to be modified into superscript, as shown in the figure. 2. Then, right-click and select the &quot;Format Cells&quot; option in the menu that appears after clicking, as shown in the figure. 3. Next, in the “Format Cells” dialog box that pops up automatically

How to use the iif function in excel How to use the iif function in excel Mar 20, 2024 pm 06:10 PM

Most users use Excel to process table data. In fact, Excel also has a VBA program. Apart from experts, not many users have used this function. The iif function is often used when writing in VBA. It is actually the same as if The functions of the functions are similar. Let me introduce to you the usage of the iif function. There are iif functions in SQL statements and VBA code in Excel. The iif function is similar to the IF function in the excel worksheet. It performs true and false value judgment and returns different results based on the logically calculated true and false values. IF function usage is (condition, yes, no). IF statement and IIF function in VBA. The former IF statement is a control statement that can execute different statements according to conditions. The latter

Where to set excel reading mode Where to set excel reading mode Mar 21, 2024 am 08:40 AM

In the study of software, we are accustomed to using excel, not only because it is convenient, but also because it can meet a variety of formats needed in actual work, and excel is very flexible to use, and there is a mode that is convenient for reading. Today I brought For everyone: where to set the excel reading mode. 1. Turn on the computer, then open the Excel application and find the target data. 2. There are two ways to set the reading mode in Excel. The first one: In Excel, there are a large number of convenient processing methods distributed in the Excel layout. In the lower right corner of Excel, there is a shortcut to set the reading mode. Find the pattern of the cross mark and click it to enter the reading mode. There is a small three-dimensional mark on the right side of the cross mark.

How to insert excel icons into PPT slides How to insert excel icons into PPT slides Mar 26, 2024 pm 05:40 PM

1. Open the PPT and turn the page to the page where you need to insert the excel icon. Click the Insert tab. 2. Click [Object]. 3. The following dialog box will pop up. 4. Click [Create from file] and click [Browse]. 5. Select the excel table to be inserted. 6. Click OK and the following page will pop up. 7. Check [Show as icon]. 8. Click OK.

See all articles