複製一個維基百科!—— 維基技術梳理

複製一個維基百科!—— 維基技術梳理

瞭解 WikiMedia

說到維基百科 不得談到一個組織 — 維基媒體wikimedia。php

企業家吉米·威爾士和軟件設計師拉里·桑格創立了維基百科(wikipedia),於2001年1月15日發佈,目標是向全人類提供自由的百科全書。最初資助的維基百科是由企業家威爾士的一家我的公司提供資助,隨着維基百科的人氣直線上升,須要消耗的資金愈來愈多,已經沒法提供足夠的錢維持維基百科的發展。創始人們決定以慈善模式運營維基百科。因而 維基媒體基金會(wikimedia foundation)應運而生。時間點-2003年6月20日。html

維基媒體基金會託管了維基百科,併發布了維基媒體運動(wikimedia movement)即:一系列組織和活動基於共享價值觀圍繞維基媒體的網站和項目進行運轉。得到了衆多有情懷的公司以及我的的資助,包括,谷歌,亞馬遜,巴菲特等等。node

wikimedia擁有衆多項目,包括維基百科,維基新聞,維基圖書館,維基物種等等。其中一個是維基百科所使用的基礎軟件 mediawiki。web

1537173621224.png

MediaWiki

介紹

MediaWiki採用PHP編程語言寫成,使用MySQL、MariaDB等關係數據庫管理系統。MediaWiki軟件最初是爲維基百科開發的,目前維基媒體基金會的全部項目乃至衆多wiki網站皆採用了這一軟件。咱們複製維基百科的關鍵。數據庫

安裝

最好採用最新1.31 不然擴展插件安裝比較麻煩apache

www.mediawiki.org/wiki/Manual…編程

記得勾選上擴展程序和圖像和文件上傳-啓用即時共享資源api

要求

web server:apache or iis瀏覽器

PHP version 7.0.0 or later服務器

Database Server, one of the following:

步驟

  1. 下載 MediaWiki並將其解壓到服務器上可被Web服務器的目錄
  2. 訪問http://domain/directory/mw-config/index.php根據提示完成配置
  3. 將配置文件 LocalSettings.php放到wiki根目錄,全部的配置都在這個文件中配置

配置

文件 LocalSettings.php包括用戶權限,網站名稱,標誌,數據庫配置,文件上傳路徑,網站語言 等默認配置,插件相關配置加在LocalSettings.php 末尾。

重要配置:

  1. $wgUseInstantCommons = true; 容許使用https://commons.wikimedia.org(維基圖片集),不開會致使圖片鏈接轉爲內聯。
  2. $wgLanguageCode = "ja";ja爲對應wiki語言,若是英語(en)wgLanguageCode爲日語(ja),會致使腳本出錯。

導入導出

/maintenance/exportDump.php

/maintenance/importDump.php

插件

查看已經安裝插件:https://yourwiki/wiki/Special:Version

個別插件須要使用到數據庫建立表,運行update.php 會讀取配置問文件,更新表結構

Wiki Family

維基百科各個語言是單獨的一個mediawiki實例,爲了能協同工做,提出了wiki family 的概念。

Multiple wikis sharing common resources

能夠共享插件

www.mediawiki.org/wiki/Manual…

WikiText

介紹

WikiText是一種輕量級標記語言,相似於markdown,用於撰寫Wiki網頁,它在HTML基礎上進行簡化,使不會使用html的人也能寫出格式清晰好看的頁面,最終是由mediawiki轉換成HTML,由瀏覽器進行渲染。

基本語法

meta.wikimedia.org/wiki/Help:W…

數據結構

mediawiki提供管理組織公共內容的基本結構,爲了區分詞條,用命名空間加冒號:來區分。

查看方式Help:Namespaces

(Main/Article) namespaces 編號爲0,搜索的時候沒必要輸入任何命名空間,也就是咱們正常所說的詞條

Template:{{templateName|arguments}}www.mediawiki.org/wiki/Help:T…

Category:類別 是一個集合(相似於月份)commons.wikimedia.org/wiki/Catego…

Module:lua腳本,加強Template 實現更復雜的功能

Project: 不是百科全書的一部分,記錄政策和指南

Special:mediawiki特殊功能,好比導入導出等工具,報告等等

複製維基百科

dumps

維基會常常會發布一些備份文件的轉儲提供給須要的人。網址:dumps.wikimedia.org/

提供內容包括:

  • 部分數據庫表備份
  • mediawiki exportDump 備份
  • 靜態頁面 (2008年以前)
  • 圖片服務器(151T)
  • 等...

根據須要下載指定語言的備份文件,有時候常常出現Template或者Mudule等數據不全。因此最好也下載commons的備份文件。

數據庫配置修改

默認單個插入語句不能超過1M,英文詞條比較大,修改成64M

SET GLOBAL max_allowed_packet = 64M;

修改最大鏈接數,提升插入效率

SET GLOBAL max_connections = 500;

在my.cnf中

修改數據庫最大核心數和innodb緩衝池大小

thread_concurrency = 32 innodb_buffer_pool_size = 1024M

php函數嵌套層數修改

默認100 ,部分插件會棧溢出

/etc/php.ini文件

在最後加上xdebug.max_nesting_level = 600

導入

下好備份文件後,使用mediawiki自帶的導入工具導入。

php /var/www/html/wiki/maintenance/importDump.php < /home/yuwenhao/wikidumps/data/Category.xml

單個進程速度很慢,將大文件拆分,而後批量插入

將文件按照namespace拆分

_1_extract_namespaces_from_wikitext.py

包裹插入必需要的標籤

_2_wrap_mediawiki_for_page.py

按照將xml拆分紅指定個數,幷包裹插入必需要的標籤

_3_split_big_xml_for_import_dump.py

批量執行插入,日誌爲相同目錄相同名稱 *.log

_4_run_all_mediawiki_dump_file.py

確保磁盤空間足夠,在導入過程當中若是空間不夠,wikitext會清空一些表,以保證插入。

wikitext--->html

既然能夠複製維基百科,爲什麼用要wikitext轉html:

  • 空間問題
  • 數據庫壓力
  • 導入時間問題
  • 方便清洗

可能遇到的坑:

  • 多語言問題:下載langlinks
  • 注意別忘了對內容進行url解碼

parsoid

介紹

mediawiki官方團隊推出的html<-->wikitext互轉應用,基於nodejs。

img

安裝&配置

www.mediawiki.org/wiki/Parsoi…

注意在配置文件中配置mediawiki的api URL

使用

1537182346108.png

壓力測試:

115.231.226.254

32個邏輯CPU 64G內存

200個線程 20次循環

8.2個每秒

1537178455894.png

須要注意

​ 清洗parsoid原始數據

相關文章
相關標籤/搜索