mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
chore(query-ko): add link and change some content
This commit is contained in:
parent
6ea2c9c1c3
commit
8259887223
@ -1,23 +1,20 @@
|
|||||||
|
<!--
|
||||||
.. Copyright BigchainDB GmbH and BigchainDB contributors
|
Copyright BigchainDB GmbH and BigchainDB contributors
|
||||||
SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
||||||
Code is Apache-2.0 and docs are CC-BY-4.0
|
Code is Apache-2.0 and docs are CC-BY-4.0
|
||||||
|
-->
|
||||||
|
|
||||||
BigchainDB 쿼리
|
BigchainDB 쿼리
|
||||||
===================
|
===================
|
||||||
|
|
||||||
노드 operator는 MongoDB의 쿼리 엔진의 최대 성능을 사용하여 모든 트랜잭션, 자산 및 메타데이터를 포함하여 저장된 모든 데이터를 검색하고 쿼리할 수 있습니다.
|
노드 operator는 MongoDB의 쿼리 엔진의 최대 성능을 사용하여 모든 트랜잭션, 자산 및 메타데이터를 포함하여 저장된 모든 데이터를 검색하고 쿼리할 수 있습니다. 노드 operator는 외부 사용자에게 얼마나 많은 쿼리 파워를 송출할지 스스로 결정할 수 있습니다.
|
||||||
노드 operator는 외부 사용자에게 얼마나 많은 쿼리 파워를 송출할지 스스로 결정할 수 있습니다.
|
|
||||||
|
|
||||||
|
|
||||||
예제 쿼리가 포함된 블로그 게시물
|
예제 쿼리가 포함된 블로그 게시물
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
|
||||||
BigchainDB 블로그에 MongoDB 도구를 사용하여 BigchainDB 노드의 MongoDB 데이터베이스를 쿼리하는 방법에 대한 게시물을 올렸습니다.
|
BigchainDB 블로그에 MongoDB 도구를 사용하여 BigchainDB 노드의 MongoDB 데이터베이스를 쿼리하는 방법에 대한 게시물을 올렸습니다. 데이터에 대한 일부 특정 예제 쿼리가 주요 내용입니다. [여기서 확인하세요](https://blog.bigchaindb.com/using-mongodb-to-query-bigchaindb-data-3fc651e0861b)
|
||||||
|
|
||||||
데이터에 대한 일부 특정 예제 쿼리가 주요 내용입니다.
|
|
||||||
`여기서 확인하세요 <https://blog.bigchaindb.com/using-mongodb-to-query-bigchaindb-data-3fc651e0861b>`_.
|
|
||||||
|
|
||||||
MongoDB에 연결하기
|
MongoDB에 연결하기
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -34,21 +31,19 @@ MongoDB 데이터베이스를 쿼리하려면 먼저 데이터베이스에 연
|
|||||||
|
|
||||||
BigchainDB 노드 운영자는 로컬 MongoDB 인스턴스에 대한 전체 액세스 권한을 가지므로 실행하는데 MongoDB의 다음의 API를 사용할 수 있습니다:
|
BigchainDB 노드 운영자는 로컬 MongoDB 인스턴스에 대한 전체 액세스 권한을 가지므로 실행하는데 MongoDB의 다음의 API를 사용할 수 있습니다:
|
||||||
|
|
||||||
- `the Mongo Shell <https://docs.mongodb.com/manual/mongo/>`_,
|
- [the Mongo Shell](https://docs.mongodb.com/manual/mongo/)
|
||||||
- `MongoDB Compass <https://www.mongodb.com/products/compass>`_,
|
- [MongoDB Compass](https://www.mongodb.com/products/compass)
|
||||||
- one of `the MongoDB drivers <https://docs.mongodb.com/ecosystem/drivers/>`_, such as `PyMongo <https://api.mongodb.com/python/current/>`_, or
|
- one of [the MongoDB drivers](https://docs.mongodb.com/ecosystem/drivers/), such as [PyMongo](https://api.mongodb.com/python/current/), or
|
||||||
- MongoDB 쿼리에 대한 서드파티툴, RazorSQL, Studio 3T, Mongo Management Studio, NoSQLBooster for MongoDB, or Dr. Mongo.
|
- MongoDB 쿼리에 대한 서드파티툴, RazorSQL, Studio 3T, Mongo Management Studio, NoSQLBooster for MongoDB, or Dr. Mongo.
|
||||||
|
|
||||||
.. note::
|
Note
|
||||||
|
|
||||||
SQL을 이용해 mongoDB 데이터베이스를 쿼리할 수 있습니다. 예를 들어:
|
SQL을 이용해 mongoDB 데이터베이스를 쿼리할 수 있습니다. 예를 들어:
|
||||||
|
|
||||||
* Studio 3T: "`How to Query MongoDB with SQL <https://studio3t.com/whats-new/how-to-query-mongodb-with-sql/>`_"
|
|
||||||
* NoSQLBooster for MongoDB: "`How to Query MongoDB with SQL SELECT <https://mongobooster.com/blog/query-mongodb-with-sql/>`_"
|
|
||||||
|
|
||||||
예를 들어 기본 BigchainDB 노드를 실행하는 시스템에 있는 경우 Mongo Shell (``mongo``)을 사용하여 연결하고 다음과 같이 볼 수 있습니다.
|
* Studio 3T: "[How to Query MongoDB with SQL](https://studio3t.com/whats-new/how-to-query-mongodb-with-sql/)"
|
||||||
|
* NoSQLBooster for MongoDB: "[How to Query MongoDB with SQL SELECT](https://mongobooster.com/blog/query-mongodb-with-sql/)"
|
||||||
|
|
||||||
.. code::
|
예를 들어, 기본 BigchainDB 노드를 실행하는 시스템에 있는 경우 Mongo Shell (``mongo``)을 사용하여 연결하고 다음과 같이 볼 수 있습니다.
|
||||||
|
|
||||||
$ mongo
|
$ mongo
|
||||||
MongoDB shell version v3.6.5
|
MongoDB shell version v3.6.5
|
||||||
@ -75,12 +70,14 @@ BigchainDB 노드 운영자는 로컬 MongoDB 인스턴스에 대한 전체 액
|
|||||||
|
|
||||||
위 예제는 몇 가지 상황을 보여줍니다:
|
위 예제는 몇 가지 상황을 보여줍니다:
|
||||||
|
|
||||||
|
- 호스트 이름이나 포트를 지정하지 않으면 Mongo Shell은 각각 `localhost`와 `27017`으로 가정합니다. (`localhost`는 우분투에 IP주소를 127.0.0.1로 설정했습니다.)
|
||||||
|
|
||||||
* BigchainDB는 데이터를 ``bigchain``.이라는 데이터베이스에 저장합니다.
|
|
||||||
* ``bigchain` 데이터베이스에는 여러 `collections<https://docs.mongodb.com/manual/core/databases-and-collections/>`_.가 포함되어 있습니다.
|
* BigchainDB는 데이터를 `bigchain`이라는 데이터베이스에 저장합니다.
|
||||||
|
* `bigchain` 데이터베이스에는 여러 [collections](https://docs.mongodb.com/manual/core/databases-and-collections/)가 포함되어 있습니다.
|
||||||
* 어떤 컬렉션에도 투표가 저장되지 않습니다. 이런 데이터는 모두 자체(LevelDB) 데이터베이스에 의해 처리되고 저장됩니다.
|
* 어떤 컬렉션에도 투표가 저장되지 않습니다. 이런 데이터는 모두 자체(LevelDB) 데이터베이스에 의해 처리되고 저장됩니다.
|
||||||
|
|
||||||
컬렉션에 대한 기술
|
컬렉션에 대한 예시 문서
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
``bigchain`` 데이터베이스의 가장 흥미로운 부분은 아래와 같습니다:
|
``bigchain`` 데이터베이스의 가장 흥미로운 부분은 아래와 같습니다:
|
||||||
@ -90,16 +87,11 @@ BigchainDB 노드 운영자는 로컬 MongoDB 인스턴스에 대한 전체 액
|
|||||||
- metadata
|
- metadata
|
||||||
- blocks
|
- blocks
|
||||||
|
|
||||||
``db.assets.findOne()`` 은 MongoDB 쿼리를 사용하여 이러한 컬렉션들을 탐색할 수 있습니다.
|
`db.assets.findOne()` 은 MongoDB 쿼리를 사용하여 이러한 컬렉션들을 탐색할 수 있습니다.
|
||||||
|
|
||||||
|
### 트랜잭션에 대한 예시 문서
|
||||||
|
|
||||||
트랜잭션에 대한 기술
|
transaction 컬렉션에서 CREATE 트랜잭션에는 추가 `"_id"` 필드(MongoDB에 추가됨)가 포함되며 `"asset"`과 `"metadata"` 필드에는 데이터가 저장되어 있지 않습니다.
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
|
|
||||||
transaction 컬렉션에서 CREATE 트랜잭션에는 추가 ``"_id"`` 필드(MongoDB에 추가됨)가 포함되며 ``"asset"``과 ``"metadata"`` 필드에는 데이터가 저장되어 있지 않습니다.
|
|
||||||
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"_id":ObjectId("5b17b9fa6ce88300067b6804"),
|
"_id":ObjectId("5b17b9fa6ce88300067b6804"),
|
||||||
@ -110,9 +102,7 @@ transaction 컬렉션에서 CREATE 트랜잭션에는 추가 ``"_id"`` 필드(M
|
|||||||
"id":"816c4dd7…851af1629"
|
"id":"816c4dd7…851af1629"
|
||||||
}
|
}
|
||||||
|
|
||||||
A TRANSFER transaction from the transactions collection is similar, but it keeps its ``"asset"`` field.
|
A TRANSFER transaction from the transactions collection is similar, but it keeps its `"asset"` field.
|
||||||
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"_id":ObjectId("5b17b9fa6ce88300067b6807"),
|
"_id":ObjectId("5b17b9fa6ce88300067b6807"),
|
||||||
@ -126,28 +116,26 @@ A TRANSFER transaction from the transactions collection is similar, but it keeps
|
|||||||
"id":"985ee697d…a3296b9"
|
"id":"985ee697d…a3296b9"
|
||||||
}
|
}
|
||||||
|
|
||||||
assets에 대한 기술
|
### assets에 대한 예시 문서
|
||||||
|
|
||||||
|
assets에 대한 기술에는 MongoDB가 추가한 `"_id"` 분야와 CREATE 거래에서 나온 `asset.data` 그리고 `"id"` 세 가지 최상위 분야로 구성되어 있습니다.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
{
|
||||||
|
"_id":ObjectId("5b17b9fe6ce88300067b6823"),
|
||||||
|
"data":{
|
||||||
|
"type":"cow",
|
||||||
|
"name":"Mildred"
|
||||||
|
},
|
||||||
|
"id":"96002ef8740…45869959d8"
|
||||||
|
}
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
### metadata에 대한 예시 문서
|
||||||
|
|
||||||
assets에 대한 기술에는 MongoDB가 추가한 ``"_id"` 분야와 CREATE 거래에서 나온 `asset.data`` 그리고 ``"id"`` 세 가지 최상위 분야로 구성되어 있습니다.
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
{
|
metadata 컬렉션의 문서는 MongoDB가 추가한 `"_id"`필드와 거래에서 나온 `asset.data`그리고 거래에서 나온 ``"id"`` 세 가지 최상위 분야로 구성되어 있습니다.
|
||||||
"_id":ObjectId("5b17b9fe6ce88300067b6823"),
|
|
||||||
"data":{
|
|
||||||
"type":"cow",
|
|
||||||
"name":"Mildred"
|
|
||||||
},
|
|
||||||
"id":"96002ef8740…45869959d8"
|
|
||||||
}
|
|
||||||
|
|
||||||
metadata에 대한 기술
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
metadata 컬렉션의 문서는 MongoDB가 추가한 ``"ID"`필드와 거래에서 나온 `asset.data``그리고 거래에서 나온 ``"ID"`` 세 가지 최상위 분야로 구성되어 있습니다.
|
|
||||||
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"_id":ObjectId("5b17ba006ce88300067b683d"),
|
"_id":ObjectId("5b17ba006ce88300067b683d"),
|
||||||
@ -157,10 +145,7 @@ metadata 컬렉션의 문서는 MongoDB가 추가한 ``"ID"`필드와 거래에
|
|||||||
"id":"53cba620e…ae9fdee0"
|
"id":"53cba620e…ae9fdee0"
|
||||||
}
|
}
|
||||||
|
|
||||||
blocks에 대한
|
### blocks에 대한 예시 문서
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"_id":ObjectId("5b212c1ceaaa420006f41c57"),
|
"_id":ObjectId("5b212c1ceaaa420006f41c57"),
|
||||||
@ -171,41 +156,27 @@ blocks에 대한
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
노드 operator가 외부유저에게 송출는 것
|
## 노드 operator가 외부 유저에게 보낼 수 있는 것
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
각 노드 operator는 외부 사용자가 자신의 로컬 MongoDB 데이터베이스에서 정보를 얻는 방법을 결정할 수 있습니다. :
|
각 노드 operator는 외부 사용자가 자신의 로컬 MongoDB 데이터베이스에서 정보를 얻는 방법을 결정할 수 있습니다. 그들은 다음과 같은 것들을 보낼 수 있습니다:
|
||||||
|
|
||||||
- 외부유저를 쿼리 처리하는 로컬 MongoDB 데이터베이스 한된 제한된 권한을 가진 역할을 가진 MongoDB 사용자 예) read-only
|
- 외부유저를 쿼리 처리하는 로컬 MongoDB 데이터베이스 한된 제한된 권한을 가진 역할을 가진 MongoDB 사용자 예) read-only
|
||||||
- 제한된 미리 정의된 쿼리 집합을 허용하는 제한된 HTTP API(BigchainDB 서버에서 제공하는 HTTP API)<http://bigchaindb.com/http-api>`_, 혹은Django, Express, Ruby on Rails, or ASP.NET.를 이용해 구현된 커스텀 HTTP API
|
- 제한된 미리 정의된 쿼리 집합을 허용하는 제한된 HTTP API, [BigchainDB 서버에서 제공하는 HTTP API](http://bigchaindb.com/http-api), 혹은Django, Express, Ruby on Rails, or ASP.NET.를 이용해 구현된 커스텀 HTTP API
|
||||||
- 다른 API(예: GraphQL API) 제3자의 사용자 정의 코드 또는 코드를 사용하여 수행할 수 있습니다..
|
- 다른 API(예: GraphQL API) 제3자의 사용자 정의 코드 또는 코드를 사용하여 수행할 수 있습니다..
|
||||||
|
|
||||||
|
|
||||||
각 노드 operator는 로컬 MongoDB 데이터베이스에 대한 다른 레벨 또는 유형의 액세스를 노출할 수 있습니다.
|
각 노드 operator는 로컬 MongoDB 데이터베이스에 대한 다른 레벨 또는 유형의 액세스를 노출할 수 있습니다.
|
||||||
예를 들어, 한 노드 operator가 최적화된 공간 쿼리를 전문으로 제공하기로 정할 수 있습니다.<https://docs.mongodb.com/manual/reference/operator/query-geospatial/>`_.
|
예를 들어, 한 노드 operator가 최적화된 [공간 쿼리](https://docs.mongodb.com/manual/reference/operator/query-geospatial/)를 전문으로 제공하기로 정할 수 있습니다.
|
||||||
|
|
||||||
보안 고려사항
|
보안 고려사항
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
BigchainDB 버전 1.3.0 이전 버전에서는 하나의 MongoDB 논리 데이터베이스가 있었기 때문에 외부 사용자에게 데이터베이스를 노출하는 것은 매우 위험했으며 권장되지 않습니다.
|
BigchainDB 버전 1.3.0 이전 버전에서는 하나의 MongoDB 논리 데이터베이스가 있었기 때문에 외부 사용자에게 데이터베이스를 노출하는 것은 매우 위험했으며 권장되지 않습니다. "Drop database"는 공유된 MongoDB 데이터베이스를 삭제합니다.
|
||||||
"drop database"는 공유된 MongoDB 데이터베이스를 삭제합니다.
|
|
||||||
|
|
||||||
|
BigchainDB 버전 2.0.0 이상에선 각 노드에 고유한 독립 로컬 MongoDB 데이터베이스가 존재합니다. 노드 간 통신은 아래 그림 1에서와 같이 MongoDB 프로토콜이 아닌 Tendermint 프로토콜을 사용하여 수행됩니다. 노드의 로컬 MongoDB 데이터베이스가 손상되어도 다른 노드는 영향을 받지 않습니다.
|
||||||
|
|
||||||
BigchainDB 버전 2.0.0 이상에선 각 노드에 고유한 독립 로컬 MongoDB 데이터베이스가 존재합니다.
|

|
||||||
노드 간 통신은 아래 그림 1에서와 같이 MongoDB 프로토콜이 아닌 Tendermint 프로토콜을 사용하여 수행됩니다.
|
|
||||||
노드의 로컬 MongoDB 데이터베이스가 손상되어도 다른 노드는 영향을 받지 않습니다.
|
|
||||||
|
|
||||||
.. figure:: _static/schemaDB.png
|
Figure 1: A Four-Node BigchainDB 2.0 Network
|
||||||
:alt: Diagram of a four-node BigchainDB 2.0 network
|
|
||||||
:align: center
|
|
||||||
|
|
||||||
Figure 1: A Four-Node BigchainDB 2.0 Network
|
|
||||||
|
|
||||||
.. raw:: html
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
퍼포먼스 및 요금 고려사항
|
퍼포먼스 및 요금 고려사항
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@ -216,21 +187,15 @@ BigchainDB 버전 2.0.0 이상에선 각 노드에 고유한 독립 로컬 Mongo
|
|||||||
|
|
||||||
일부 쿼리는 너무 오래 걸리거나 리소스를 너무 많이 사용할 수 있습니다. 노드 operator는 사용할 수 있는 리소스에 상한을 두고, 초과된다면 중지(또는 차단)해야 합니다.
|
일부 쿼리는 너무 오래 걸리거나 리소스를 너무 많이 사용할 수 있습니다. 노드 operator는 사용할 수 있는 리소스에 상한을 두고, 초과된다면 중지(또는 차단)해야 합니다.
|
||||||
|
|
||||||
MongoDB 쿼리를 더욱 효율적으로 만들기 위해 _`인덱스 <https://docs.mongodb.com/manual/indexes/>`_를 만들 수 있습니다. 이러한 인덱스는 노드 operator 또는 일부 외부 사용자가 생성할 수 있습니다(노드 운영자가 허용하는 경우). 인덱스는 비어 있지 않습니다. 새 데이터를 컬렉션에 추가할 때마다 해당 인덱스를 업데이트해야 합니다. 노드 운영자는 이러한 요금을 인덱스를 생성한 사람에게 전달하고자 할 수 있습니다. mongoDB에서는 단일 컬렉션은 64개 이하의 인덱스를 가질 수 있습니다.
|
MongoDB 쿼리를 더욱 효율적으로 만들기 위해 [인덱스](https://docs.mongodb.com/manual/indexes/)를 만들 수 있습니다. 이러한 인덱스는 노드 operator 또는 일부 외부 사용자가 생성할 수 있습니다(노드 운영자가 허용하는 경우). 인덱스는 비어 있지 않습니다. 새 데이터를 컬렉션에 추가할 때마다 해당 인덱스를 업데이트해야 합니다. 노드 운영자는 이러한 요금을 인덱스를 생성한 사람에게 전달하고자 할 수 있습니다. mongoDB에서는 [단일 컬렉션은 64개 이하의 인덱스를 가질 수 있습니다](https://docs.mongodb.com/manual/reference/limits/#Number-of-Indexes-per-Collection).
|
||||||
<https://docs.mongodb.com/manual/reference/limits/#Number-of-Indexes-per-Collection>`_.
|
|
||||||
|
|
||||||
One can create a follower node: a node with Tendermint voting power 0. It would still have a copy of all the data, so it could be used as read-only node. A follower node could offer specialized queries as a service without affecting the workload on the voting validators (which can also write). There could even be followers of followers.
|
Tendermint voting 파워가 0인 노드인 추종자 노드를 생성할 수 있다. 여전히 모든 데이터의 복사본이 있으므로 읽기 전용 노드로 사용할 수 있습니다. Follower 노드는 투표 검증자의 작업 부하에 영향을 미치지 않고 서비스로 전문화된 쿼리를 제공할 수 있습니다(쓰기도 가능). 팔로워의 팔로워들도 있을 수 있습니다.
|
||||||
Tendermint voting파워가 0인 노드인 추종자 노드를 생성할 수 있다. 여전히 모든 데이터의 복사본이 있으므로 읽기 전용 노드로 사용할 수 있습니다. Follower 노드는 투표 검증자의 작업 부하에 영향을 미치지 않고 서비스로 전문화된 쿼리를 제공할 수 있습니다(쓰기도 가능). 팔로워의 팔로워들도 있을 수 있습니다.
|
|
||||||
|
|
||||||
자바스크립트 쿼리 코드 예시s
|
자바스크립트 쿼리 코드 예시
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
다음 중 하나를 사용하여 노드의 MongoDB 데이터베이스에 연결할 수 있습니다.
|
[MongoDB node.js 드라이버](https://mongodb.github.io/node-mongodb-native/?jmp=docs)와 같은 MongoDB 드라이버를 사용하여 다음 중 하나를 사용하여 노드의 MongoDB 데이터베이스에 연결할 수 있습니다. 여기 자바스크립트 쿼리 코드에 대한 링크가 있습니다.
|
||||||
MongoDB node.js 드라이버와 같은 MongoDB 드라이버의
|
|
||||||
<https://mongodb.github.io/node-mongodb-native/?jmp=docs>`_.
|
|
||||||
|
|
||||||
여기 자바스크립트 쿼리 코드에 대한 링크가 있습니다
|
- [The BigchainDB JavaScript/Node.js driver source code](https://github.com/bigchaindb/js-bigchaindb-driver)
|
||||||
|
- [Example code by @manolodewiner](https://github.com/manolodewiner/query-mongodb-bigchaindb/blob/master/queryMongo.js)
|
||||||
- `The BigchainDB JavaScript/Node.js driver source code <https://github.com/bigchaindb/js-bigchaindb-driver>`_
|
- [More example code by @manolodewiner](https://github.com/bigchaindb/bigchaindb/issues/2315#issuecomment-392724279)
|
||||||
- `Example code by @manolodewiner <https://github.com/manolodewiner/query-mongodb-bigchaindb/blob/master/queryMongo.js>`_
|
|
||||||
- `More example code by @manolodewiner <https://github.com/bigchaindb/bigchaindb/issues/2315#issuecomment-392724279>`_
|
|
||||||
Loading…
x
Reference in New Issue
Block a user