SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
Internship
at
Preferred Infrastructure

Sotaro Karasawa (sotarok)
Yet Another PHP Programmer
Agenda
• 目標
• 転置インデックス用ライブラリ libkorakuen
 –   中間発表までのおさらい
 –   新しいアプローチでの実装
 –   実装にあたってのポイント
 –   英語 Wikipedia のインデックス作成
 –   デモ
 –   libkorakuen のこれから
• インターンを終えて


                              Copyright © sotarok @ PFI.
目標
• 転置インデックス用のライブラリをつくる!
 – メモリに乗り切らないような大規模で使える
 – インデックスファイルを圧縮する
 – Sedue で使える




                     Copyright © sotarok @ PFI.
転置インデックス用ライブラリ
libkorakuen
中間発表までのアプローチ


   ⽂書            読み込み



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書                           読み込み



                                    libkorakuen
 Temporary
   Index
                         On Memory
                                                  Encoder
                           Index
             Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
             Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
   Index
             Keyword: Document (Pos, Pos, ...), Document (Pos , ...), ...
             ...                                     Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書            読み込み



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書




 Temporary   書き出す         libkorakuen
   Index
                    On Memory
                                    Encoder
                      Index



   Index

                                        Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書                   読み込み




 Temporary   書き出す         libkorakuen
   Index
                    On Memory
                                    Encoder
                      Index



   Index

                                        Copyright © sotarok @ PFI.
中間発表までのアプローチ


   ⽂書



                   libkorakuen
 Temporary
   Index
             On Memory
                             Encoder
               Index



   Index

                                 Copyright © sotarok @ PFI.
中間発表までのおさらい
• 中間発表時
  – ⼀応インデックスは作れた
  – 10万⽂書程度で実験もOK



ところが...




                    Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた




                          Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index
  Keyword2   Index
     ...      ...




                          Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2
  Keyword2   Index
     ...      ...




                              Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2   Index3
  Keyword2   Index
     ...      ...




                                Copyright © sotarok @ PFI.
問題点
• ⼀時インデックスに,Tokyo Cabinet を使っていた


   Keyword   Index   Index2   Index3
  Keyword2   Index
     ...      ...


• メモリから⼀時インデックスに書き出すたびに
  Tokyo Cabinet上での「Append」が発⽣
• 巨大なデータを扱うと途中から⼊らなくなる

                                Copyright © sotarok @ PFI.
アプローチを考え直す


  英語のWikipediaすべてが目標




  英語のWikipediaを最低目標とし
   可能な限りスケールする設計
                        Copyright © sotarok @ PFI.
新しいアプローチ
•   MapReduce 的な考え⽅!
•   途中でインデックスを作成せずにすべて読み込む
•   それぞれのファイルをソートする
•   2つずつマージする
•   インデックスを作成する




                      Copyright © sotarok @ PFI.
読み込む
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
何も考えずにとりあえず読み込む
              On Memory
               keyword id   doc id            pos
  ⽂書
                   1          1                 0
                   2          1                 4
                   3          1               10
libkorakuen        4          2                 0
                   5          2                 8
                   1          2               12
                   6          3                 0
⼀時ファイル
                   ...        ...              ...

                                     Copyright © sotarok @ PFI.
分割された⼀時ファイル

  ⽂書


              keyword id   doc id   pos
                  1          1      0
libkorakuen       2          1      4
                  3          1      10
                  4          2      0
                  5          2      8
                  1          2      12
⼀時ファイル            6          3      0
                  ...        ...    ...

                                          Copyright © sotarok @ PFI.
ソートする
ソートする
                 On Memory
                  keyword id   doc id            pos
     ⽂書
                      1          1                 0
                      2          1                 4
                      3          1               10
   libkorakuen        4          2                 0
                      5          2                 8
                      1          2               12
⼀時ファイル
                      6          3                 0
                      ...        ...              ...

                                        Copyright © sotarok @ PFI.
ソートする
                 On Memory
                  keyword id   doc id            pos
     ⽂書
                      1          1                 0
                      1          2               12
                      2          1                 4
   libkorakuen        3          1               10
                      4          2                 0
                      5          2                 8
⼀時ファイル
                      6          3                 0
                      ...        ...              ...
      ソート済み
      ⼀時ファイル                            Copyright © sotarok @ PFI.
マージする
マージする

                     ソート済み    ソート済み          ソート済み
                    ⼀時ファイル   ⼀時ファイル   ...   ⼀時ファイル
 ⽂書                    1        2              n




      libkorakuen



  マージ済み
 ⼀時ファイル
    1
マージする

                     ソート済み    ソート済み          ソート済み
                    ⼀時ファイル   ⼀時ファイル   ...   ⼀時ファイル
 ⽂書                    3        4              n




      libkorakuen



  マージ済み              マージ済み
 ⼀時ファイル             ⼀時ファイル
    1                  2
マージする

                     ソート済み    ソート済み
                    ⼀時ファイル   ⼀時ファイル
 ⽂書                    n-1      n




      libkorakuen



  マージ済み              マージ済み          マージ済み
 ⼀時ファイル             ⼀時ファイル   ...   ⼀時ファイル
    1                  2              2/n
マージする

 ⽂書




libkorakuen



ひとつの大きな
  マージ済み
 ⼀時ファイル
インデックス作成
インデックス作成
              Keyword Document (Pos, Pos, ...),
                       Document (Pos , ...), ...
                       Document (Pos , ...), ...
 ⽂書
                       Document (Pos , ...), ...
              Keyword Document (Pos, Pos, ...),
                       Document (Pos , ...), ...
libkorakuen            Document (Pos , ...), ...
                       Document (Pos , ...), ...
              Keyword Document (Pos, Pos, ...),
                       Document (Pos , ...), ...
ひとつの大きな
  マージ済み                Document (Pos , ...), ...
 ⼀時ファイル
                       Document (Pos , ...), ...
インデックス作成
                    Keyword Document (Pos, Pos, ...),
              pos            Document (Pos , ...), ...
               0
                             Document (Pos , ...), ...
 ⽂書
                             Document (Pos , ...), ...
                    Keyword Document (Pos, Pos, ...),
              pos            Document (Pos , ...), ...
libkorakuen   122            Document (Pos , ...), ...
                             Document (Pos , ...), ...
                    Keyword Document (Pos, Pos, ...),

ひとつの大きな       pos            Document (Pos , ...), ...
  マージ済み       456            Document (Pos , ...), ...
 ⼀時ファイル
                             Document (Pos , ...), ...
インデックス作成
              インデックス!

 ⽂書




libkorakuen
ポイント
ポイント
• 簡潔で,Sedue にも使いやすそうなAPI
 – ⽂書数分だけ Addして
 – BuildIndexするだけ
 – Search で探す




                           Copyright © sotarok @ PFI.
Add
• 単語の分割やポジションはライブラリの外で
• ⽂書ID(外部で管理してるものでOK)
 – 自動的に内部でIDを振りなおす
• 単語とその出現場所のリスト(vector)
 – 単語IDも⽣成




                          Copyright © sotarok @ PFI.
Search
• 単語をわたす (結果を⼊れるvectorもわたす)
• その単語の出現するドキュメントとポジションが
  得られる




                      Copyright © sotarok @ PFI.
圧縮
• 中間発表からかわらず,Variable Byte Code




                             Copyright © sotarok @ PFI.
Variable Byte Code

3: 00000000 00000000 00000000 00000011

            3: 10000011




                               Copyright © sotarok @ PFI.
Variable Byte Code

3: 00000000 00000000 00000000 00000011

              3: 10000011


       Byte
              ?


                               Copyright © sotarok @ PFI.
圧縮
•   ドキュメントIDのリスト
•   昇順にソートされている
•   前の⽂書との差分に変換
•   差分とった整数をエンコード




                    Copyright © sotarok @ PFI.
英語インデックスの作成
• 単語数: 約 1500 万(たぶん)
• ドキュメント: 約 300万
• 元⽂書: 8.9 GB

• 作成時間: 1:30:37.09
• 作成後インデックス:6.1 GB
 – ドキュメントIDを振りなおしているおかげでほとん
   どがものすごく⼩さい整数 → 圧縮率良



                       Copyright © sotarok @ PFI.
デモ
その他のポイント
• テストケースかきました
 – まだ GetKeywordID, GetDocID しかない




                                    Copyright © sotarok @ PFI.
その他のポイント2
• ライブラリ検証用プログラム (デモしたやつ)
 – ii_search
 – ii_check




                      Copyright © sotarok @ PFI.
これからの libkorakuen
これからの libkorakuen
• Sedue に
• テストケースかきまくる必要性
• ソート/マージ はスレッド使えば並列作業ができ
  るはず




                     Copyright © sotarok @ PFI.
インターンを終えて
成果として
• Tokyo Dystopia を使っていては作れない大きさの
  転置インデックスが作れるライブラリが作成でき
  た




                          Copyright © sotarok @ PFI.
やりたかったのにできなかった
• Sedue への組み込み
• PHP 関連のライブラリ
 – これは趣味でもできそうなので近いうち実装する




                     Copyright © sotarok @ PFI.
その他さまざまな思い
• 技術的なことに関して
 – アルゴリズムやデータ構造を考えてプログラムを
   組むこと
 – ライブラリを利用するか自分で実装するか
 – 実装の背景にある理論や研究
• 技術者として
 – 自分の知らない分野のことを勉強するのは楽しい
 – PHP とか怖くないという自信(何
• まとまらないので近⽇中にブログに書きます!


                     Copyright © sotarok @ PFI.
ありがとうございました
お世話になりました!

Weitere ähnliche Inhalte

Andere mochten auch

Heart Attack الازمة القلبية
Heart Attack الازمة القلبيةHeart Attack الازمة القلبية
Heart Attack الازمة القلبيةamr hassaan
 
CRC Network | Financial Implications of the CRC on the Private Sector
CRC Network | Financial Implications of the CRC on the Private SectorCRC Network | Financial Implications of the CRC on the Private Sector
CRC Network | Financial Implications of the CRC on the Private SectorAcre
 
Ad Words Optimizacion
Ad Words  OptimizacionAd Words  Optimizacion
Ad Words OptimizacionJuan Pittau
 
Caribbean higher education seen with European eyes
Caribbean higher education seen with European eyesCaribbean higher education seen with European eyes
Caribbean higher education seen with European eyesFabio Nascimbeni
 
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...Olaf Janssen
 
Internet factbook (diritto_&_politica)
Internet factbook (diritto_&_politica)Internet factbook (diritto_&_politica)
Internet factbook (diritto_&_politica)Riccardo Fabio Loconte
 
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιο
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιογραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιο
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιοChristos Gotzaridis
 
Saude mental europa oms
Saude mental europa omsSaude mental europa oms
Saude mental europa omsjsoeiro
 
Optify presentation buzz to bucks
Optify presentation   buzz to bucksOptify presentation   buzz to bucks
Optify presentation buzz to bucksOptify
 
Vilniaus Universiteto Studijų Tarptautiškumas
Vilniaus Universiteto Studijų TarptautiškumasVilniaus Universiteto Studijų Tarptautiškumas
Vilniaus Universiteto Studijų TarptautiškumasDainius Jakučionis
 
Pictures Of Earth Takeb By Astronaut Sunita Williams
Pictures Of Earth Takeb By Astronaut Sunita WilliamsPictures Of Earth Takeb By Astronaut Sunita Williams
Pictures Of Earth Takeb By Astronaut Sunita Williamsamr hassaan
 

Andere mochten auch (16)

Registro anecdótico
Registro anecdóticoRegistro anecdótico
Registro anecdótico
 
سهل وصعب
سهل وصعبسهل وصعب
سهل وصعب
 
Heart Attack الازمة القلبية
Heart Attack الازمة القلبيةHeart Attack الازمة القلبية
Heart Attack الازمة القلبية
 
Dillard check it out
Dillard check it outDillard check it out
Dillard check it out
 
AdWords Gestion
AdWords GestionAdWords Gestion
AdWords Gestion
 
CRC Network | Financial Implications of the CRC on the Private Sector
CRC Network | Financial Implications of the CRC on the Private SectorCRC Network | Financial Implications of the CRC on the Private Sector
CRC Network | Financial Implications of the CRC on the Private Sector
 
7 bills and 7 ways to save
7 bills and 7 ways to save7 bills and 7 ways to save
7 bills and 7 ways to save
 
Ad Words Optimizacion
Ad Words  OptimizacionAd Words  Optimizacion
Ad Words Optimizacion
 
Caribbean higher education seen with European eyes
Caribbean higher education seen with European eyesCaribbean higher education seen with European eyes
Caribbean higher education seen with European eyes
 
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...
Case study: Samenwerking Wikipedia met de Openbare Bibliotheek Oosterhout (Th...
 
Internet factbook (diritto_&_politica)
Internet factbook (diritto_&_politica)Internet factbook (diritto_&_politica)
Internet factbook (diritto_&_politica)
 
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιο
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιογραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιο
γραπτές ανακεφαλαιωτικές εξετάσεις γυμνάσιο
 
Saude mental europa oms
Saude mental europa omsSaude mental europa oms
Saude mental europa oms
 
Optify presentation buzz to bucks
Optify presentation   buzz to bucksOptify presentation   buzz to bucks
Optify presentation buzz to bucks
 
Vilniaus Universiteto Studijų Tarptautiškumas
Vilniaus Universiteto Studijų TarptautiškumasVilniaus Universiteto Studijų Tarptautiškumas
Vilniaus Universiteto Studijų Tarptautiškumas
 
Pictures Of Earth Takeb By Astronaut Sunita Williams
Pictures Of Earth Takeb By Astronaut Sunita WilliamsPictures Of Earth Takeb By Astronaut Sunita Williams
Pictures Of Earth Takeb By Astronaut Sunita Williams
 

Kürzlich hochgeladen

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (9)

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

Internship at PFI