p2p 데이터베이스-Hyperbee-워크숍

9887 단어 nodedatabasewebdp2p

🎓 Workshop: What you will learn

* Some background on peer to peer and decentralized web

* How to get started using hyperspace cli

* How to create a p2p database using the hyp cli

* How to perform basic database functions using p2p db

* How to connect to a p2p database from a remote system

* How to query a remote p2p database and show results


Hyperbee는 b트리 구조로 구축된 p2p 데이터베이스로hypercore라고 불리는 추가 로그 구조만 사용하여 나누어 준다.hyperprotocol 직원들은 hyperspace라는 p2p 데이터베이스를 처리할 수 있는 도구를 만들었습니다.본 세미나에서는 p2p 데이터베이스를 어떻게 만들고 p2p 데이터베이스와 상호작용하며 원격 서버에서 이 데이터베이스로 연결하는지 배울 것이다.

선결 조건


이번 세미나에서 내가 뭘 알아야 합니까?
  • Javascript —  https://developer.mozilla.org/en-US/docs/Web/Javascript
  • NodeJS v14+ —  https://nodejs.org
  • NodeJS 흐름에 대한 이해 —  https://nodejs.dev/learn/nodejs-streams
  • ExpressJS 베이스 —  https://expressjs.com/
  • p2p가 뭐예요?


    p2p 또는 p2p는 집중식 서버에 의존하지 않고 정보를 공유하는 기술이다.어떤 사람들은 p2p를 분산식 네트워크라고 부르지만, 나는 분산식 네트워크가 더욱 광범위할 것이라고 생각한다.p2p는 컴퓨터로 하여금 대화를 할 수 있게 하고, 조화로운 토론의 집중 시스템에 의존할 필요가 없다.일부 유행하는 점대점 기술은bittorrent와 웹rtc이다.BitTorrent는 다른 서버에서 큰 파일을 다운로드할 수 있도록 해 줍니다. 이렇게 하면 다운로드 속도가 훨씬 빨라질 것입니다.WebRTC는 중앙 서비스 없이도 브라우저 간에 비디오, 오디오 및 데이터를 공유할 수 있습니다.

    무엇이 p2p 데이터베이스입니까?


    p2p 데이터베이스는 p2p 네트워크를 통해 접근할 수 있는 데이터베이스로 응용 프로그램이 데이터베이스에 연결되고 데이터에 접근할 수 있도록 한다.너는 아마 좀 곤혹스러울 것이다. 나는 왜 p2p 데이터베이스에 대해 흥미를 가져야 합니까?전통적인 데이터베이스에 대해 당신은 하나의 스위치를 가지고 있습니다. 이 스위치는 데이터를 만들고 조회하는 접근을 제어합니다.따라서 모든 사람이 이 데이터베이스를 이용하여 내용을 만들려면 데이터베이스에 연결하고 정보를 저장해야 하며, 내용을 읽으려면 데이터베이스에 연결하고 정보를 조회해야 한다.이것은 많은 상황에서 매우 효과적이다.

    가설 용례


    p2p 소셜네트워크서비스는 모든 사용자가 자신의 로컬 데이터베이스를 만들고 이 데이터베이스의 식별자를feed중합기 응용 프로그램에 제공한다. 이 응용 프로그램은 모든 사용자 데이터베이스를 사용하고 모든 사람의 댓글을 표시하는 큰 데이터베이스에 통합시킨다.이러한 시스템의 장점은 내용의 창설자는 여전히 내용의 소유권을 가지고 있으며, 요약 집합기는 전체 요약만 제어할 수 있지만 클라이언트의 내용을 삭제할 수 없다는 것이다.

    개시하다


    hyperspace cli를 설치하기 위해 터미널을 사용합니다.
    npm install --global @hyperspace/cli
    
    터미널을 사용하여 새 폴더를 만들고 새 NodeJS 응용 프로그램을 초기화합니다.
    mkdir p2pDb
    cd p2pDb
    npm init -y
    
    npm에서 의존항을 설치합니다.
    npm install express hyperspace hyperbee
    
    복제 서버.js 파일 예 서버 코드:
    p2p Database workshop initial server code
    p2p Database workshop initial server code. GitHub Gist: instantly share code, notes, and snippets.
    262588213843476Gist

    hyp를 사용하여hyperbee 데이터베이스 만들기


    hyperbee 데이터베이스를 만들려면, hyperspace 수호 프로세스를 시작하고, cli를 사용하여create 명령을 호출해야 합니다.이것은 hyper://URL을 줍니다. 이 URL은 우리가 hyperbee 데이터베이스에 접근하는 식별자입니다.
    hyp daemon start
    hyp create bee
    

    우리 서버에 데이터베이스를 설정합니다.js


    두 개의 노드 모듈이hyperbee 데이터베이스,hyperspace,hyperbee에 연결되어 프로젝트에db라는 새 파일을 만듭니다.이 파일에는 모든 DB 명령이 유지됩니다.
    db.js
    const { Client } = require('hyperspace')
    const Hyperbee = require('hyperbee')
    const cuid = require('cuid')
    
    const client = new Client()
    const store = client.corestore()
    const core = store.get('ee26ef1982c9f3bb3ce49adc46cbc55467ecb88779a629234af702da9965758e')
    const db = new Hyperbee(core, {
      keyEncoding: 'utf-8',
      valueEncoding: 'json'
    })
    
    // add movie to db
    exports.add = async function (movie) {
      return db.put(cuid(), movie)
    }
    
    // list movies
    exports.list = async function () {
      var movies = []
      await new Promise(r => {
        db.createReadStream()
          .on('data', entry => movies.push(entry.value))
          .on('end', r)
      })
      return movies
    }
    
    이 데이터베이스에js 파일에서 우리는 두 개의 함수를 만들었습니다.dd와list입니다.dd 함수는hyperbee 데이터베이스에 데이터를 추가하고,list 함수는hyperbee 데이터베이스에 있는 모든 문서를 유동화합니다.데이터베이스에 연결하기 위해서 우리는 새로운 클라이언트를hyperspace에 실례화한 다음에hyperspace 저장소에 연결한 다음에 저장소에서hypercore를 가져와야 한다. 이 핵심을 사용하면hyperbee 데이터베이스를 실례화할 것이다.

    우리 웹 응용 프로그램에서 영화 추가


    웹 응용 프로그램에서 영화를 추가하려면db를 가져가야 합니다.js 모듈을 서버 js 모듈로 변환하려면:
    const { add, list } = require('./db') // at the top of serverjs
    
    우리 프로그램에서post ("/") 프로세서입니다. 비동기 함수로 변환하고dd(req.body) 를 호출할 수 있습니다.
    app.post('/', express.json(), async (req, res) => {
      await add(req.body)
      res.setHeader('content-type', 'text/html')
      res.send(`<li>${req.body.title}</li>`)
    })
    

    해비의 영화를 열거하다


    get/movies 단점에서 DB 모듈에서list 방법을 호출하고 결과를 비추어 만들 수 있습니다
    각 영화의 제목은 677이다.
    app.get('/movies', async (req, res) => {
      const s = await list()
      res.setHeader('content-type', 'text/html')
      res.send(s.map(m => `<li>${m.title}</li>`).join(''))
    })
    

    영화 새로 고침


    영화를 추가한 후, 영화 목록을 요청하고, 목록을
  • s 제목 목록을 표시합니다.
    app.post('/', express.json(), async (req, res) => {
      await add(req.body)
      const s = await list()
      res.setHeader('content-type', 'text/html')
      res.send(s.map(m => `<li>${m.title}</li>`).join(''))
    })
    

    섹션 2: 원격 어플리케이션


    지금까지 이 과정은 전통적인 데이터베이스 응용 프로그램과 크게 다르지 않았다. 현재 우리는 다른 가상 기기를 사용하여 영화 목록 응용 프로그램을 시작할 것이다. 이 응용 프로그램은 슈퍼 데이터베이스 키를 얻고 영화 목록을 연결하여 웹 브라우저에 표시할 것이다.
    이 새 기계에서 우리는 초공간 환경을 설치해야 한다
    npm install --global @hyperspace/cli
    
    mkdir p2pClient
    cd p2pClient
    
    npm init -y
    npm install express hyperspace hyperbee
    
    서버 2를 만듭니다.js와db2.js 파일
    p2p Database workshop initial server code
    p2p Database workshop initial server code. GitHub Gist: instantly share code, notes, and snippets.
    262588213843476Gist

    p2p Database workshop initial server code
    p2p Database workshop initial server code. GitHub Gist: instantly share code, notes, and snippets.
    262588213843476Gist

    db2에 키를 설정합니다.js 파일을 실행하고 서버를 실행합니다.js
    npx nodemon server2.js
    
    브라우저를 열 때, 하이퍼스페이스에 데이터를 복사하라고 말하지 않았기 때문에, 영화 목록을 꺼내지 않습니다.
    첫 번째 응용 프로그램과 데이터베이스로 이동합니다.js 파일에는 다음이 추가됩니다.
    db.ready()
      .then(() => client.replicate(core))
    
    이것은 Hyperspace가 우리의 데이터베이스를 복제하는 것을 알려 줍니다. 이제 두 번째 프로그램으로 넘어가서 브라우저를 새로 고칠 때, 우리는 영화 목록을 받아야 합니다.

    성공!


    시간을 들여 더 많은 영화를 추가하고 다른 프로그램으로 넘어가 화면을 새로 고쳐 새로 추가된 영화가 나오는지 확인하세요.이렇게 하면 한 피어에서 다른 피어로 데이터를 원격으로 복제합니다.
    몇 가지 고려 사항/기능:
    *DHT를 통해 하이퍼링크 발견
    *슈퍼맨은 드물다 — 이것은 전체 데이터 집합을 다운로드해서 조회할 필요가 없다는 것을 의미합니다.hyperspace는 당신이 필요로 하는 내용을 다운로드하기만 하면 됩니다.
    계산해야 할 것이 많습니다.
    hypercore-protocol/hyperbee
    An append-only Btree running on a Hypercore. Contribute to hypercore-protocol/hyperbee development by creating an account on GitHub.
    hypercore-protocolGitHub

    요약


    p2p는 재미있고 데이터베이스도 재미있습니다. 둘을 결합하면 미친 과학이기 때문에 낙담하고 낙담하기 쉽습니다.이 공구들은 매일 더 좋아지고 있는데, 나는 확실히 이 기술의 효과적인 사용 사례가 있다고 생각한다.나는 비디오에서 몇 가지 예를 설명할 것이다.NodeJS는 기능이 강한 서버가 실행될 때 많은 일을 할 수 있고 심지어 대등한 네트워크를 통해 데이터베이스를 나누어 줄 수 있다.

    If you enjoyed this workshop and would like to know more, go to https://hypercore-protocol.org/ and read the documentation.


  • 좋은 웹페이지 즐겨찾기