Core points
- Ascribe uses the Bitcoin blockchain to record the unique identification of digital artworks and combines NoSQL database (RethinkDB) with the blockchain layer to create BigchainDB. This combination enhances control, asset tracking and security levels, and is particularly attractive to NoSQL database users.
- BigchainDB claims to be completely decentralized due to its blockchain layer. It also adds transaction support, a feature that is often missing in NoSQL databases. This support ensures that database changes have occurred when writing to the underlying NoSQL database through the blockchain layer.
- BigChainDB can fill in missing gaps in current NoSQL and distributed databases, which may provide effective business or use cases. For blockchain enthusiasts, it accomplishes the challenge of fully decentralized application stacks, which may change how applications are developed, deployed, and maintained.
Although the future of Bitcoin is unclear, the underlying technology on which it depends - blockchain - has completely changed many industries and projects, and more applications are about to emerge.
Ascribe is a compelling startup that uses the Bitcoin blockchain to record a limited number of unique identifiers for digital artworks. Therefore, due to this limited number of “copies”, they are traceable, accountable and (hopefully) higher value.
Ascribe encountered technical problems when using this method, which mainly stemmed from the Bitcoin blockchain itself. It is slow to write everything to it, costly (currently 80 cents per time) and limited daily entries and total write capacity. It is also contrary to typical scalable database techniques, adding nodes does not improve performance, and there is no real query language. This makes business expansion based on Bitcoin blockchain a challenge.
However, the blockchain concept is a powerful concept, and its use and legitimacy have increased over the past few years, and even large banks have announced that they are developing technologies inspired by the concept.
Ascribe decided to combine the advantages of the two, adopting a proven NoSQL database (RethinkDB) and adding a blockchain layer to it to enhance control, asset tracking and additional security levels.
The combination of this technology is particularly attractive to NoSQL database users, as few NoSQL database support has traditionally helped ensure that the database changes have occurred "transactions". BigchainDB adds transaction support by writing to the underlying NoSQL database through the blockchain layer.
BigChainDB also claims to be completely decentralized due to the blockchain layer. While many distributed NoSQL databases claim to be decentralized, there are often pseudo-master/slave settings.
Installing BigChainDB and its dependencies
There are several ways to install BigChainDB. First I tried Docker image, but encountered some connection issues and found that the Python package is the most reliable.
- Install RethinkDB, and for other Mac users, there is also a Homebrew package available.
- Install Python 3.4.
- Install BigChainDB with Pip – sudo pip install bigchaindb
- Start RethinkDB with rethinkdb
- Start BigChainDB with bigchaindb start, it will also configure some content for you.
- Open BigChainDB (actually RethinkDB UI) at http://SERVER_IP:58080/.
Simple Example - Message Allocation and Tracking
One of the main use cases of BigchainDB (and why Ascribe created it) is to track assets, so let's create a simple example in Python. First run the following command in your terminal.
pip install bigchaindb bigchaindb configure bigchaindb show-config
Create a new file, app.py and add the following:
from bigchaindb import Bigchain b = Bigchain() print(b)
This will import the bigchaindb library, create a new object and connect to it using the settings file you just created.
Then run the Python application:
python app.py
You should see something like <bigchaindb.core.bigchain at 0x...>
, which tells us everything is fine.
Add the following:
from bigchaindb import Bigchain import time b = Bigchain() spuser_priv, spuser_pub = b.generate_keys() print("User Created") digital_asset_payload = {'msg': 'This is my special message just for you'} tx = b.create_transaction(b.me, spuser_pub, None, 'CREATE', payload=digital_asset_payload) print("Transaction Written") tx_signed = b.sign_transaction(tx, b.me_private) b.write_transaction(tx_signed) print ("Transaction Written to BC, now waiting") time.sleep(10) tx_retrieved = b.get_transaction(tx_signed['id']) print(tx_retrieved)
This will create a user and associated key to access the database – remember the additional security level. Then create a payload for writing to the database, allocate the required key, and write it.
How many seconds does a new transaction take to pass from the blockchain layer to the database. The code waits for ten seconds, and then retrieves and prints the record. You should see something like the following:
{ "signature": '304502205...', "id": "0f442bcf4a42...", "transaction": { "timestamp": "1457104938.430521", "data": { "hash": "b32779e57...", "payload": { "msg": "This is my special message just for you" } }, "operation": "CREATE", "current_owner": "hFJKYk2...", "new_owner": "26pdiQTTx...", "input": None } } }
You now have a special message that you want one person to be able to access:
... print("Now to transfer") spuser2_priv, spuser2_pub = b.generate_keys() print("Second User Created") tx_transfer = b.create_transaction(spuser_pub, spuser2_pub, tx_retrieved['id'], 'TRANSFER') print("Transfer Created") tx_transfer_signed = b.sign_transaction(tx_transfer, spuser_priv) b.write_transaction(tx_transfer_signed) print ("Transaction Written to BC, now waiting") time.sleep(15) tx_transfer_retrieved = b.get_transaction(tx_transfer_signed['id']) print("Transferred") print(tx_transfer_retrieved)
This will create a second user, then get the transaction ID of the special message and transfer it to the second user. BigChainDB's blockchain layer will prevent users and your code from performing the same operations twice. If you try to run the above code again, a double spending exception is thrown.
This example shows a small part of how BigChainDB is added to RethinkDB, and a complete list is available here.
HTTP endpoint
Currently, the only client library available for BigChainDB is Python, and there may be more libraries, but at the same time, a limited HTTP endpoint can be used to query existing transactions:
http://miracleart.cn/link/6eea81fa0417b0068e614074225a9daf
Or write a new transaction using the following method:
http://miracleart.cn/link/f8b64946ebc86a5e23e1605a2943210c
Add the following payload, where the operation can be changed to suit different types of transactions that can be written:
{ "id": "", "signature": "", "transaction": { "current_owner": "", "data": { "hash": "", "payload": null }, "input": null, "new_owner": "", "operation": "", "timestamp": "" } }
Components of the Decentralized Future
Ignore the origin of its blockchain for the time being, BigChainDB provides a large number of features missing in current NoSQL and distributed databases. This fact alone may be the reason to try it and may provide a valid business/use case.
For blockchain enthusiasts among you, it also completes the puzzle of a complete decentralized application stack. In theory, there is now Ethereum for applications, IPFS for file systems, and BigChainDB for data storage. These components set the stage for very different ways of developing, deploying and maintaining applications, creating a fascinating future, and I hope to hear your comments on this in the comments below.
(The FAQ part is omitted here because this part is just a simple summary and retelling of the content of the article and does not fall into the category of pseudo-originality.)
The above is the detailed content of Managing Data Storage with Blockchain and BigchainDB. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Python's unittest and pytest are two widely used testing frameworks that simplify the writing, organizing and running of automated tests. 1. Both support automatic discovery of test cases and provide a clear test structure: unittest defines tests by inheriting the TestCase class and starting with test\_; pytest is more concise, just need a function starting with test\_. 2. They all have built-in assertion support: unittest provides assertEqual, assertTrue and other methods, while pytest uses an enhanced assert statement to automatically display the failure details. 3. All have mechanisms for handling test preparation and cleaning: un

PythonisidealfordataanalysisduetoNumPyandPandas.1)NumPyexcelsatnumericalcomputationswithfast,multi-dimensionalarraysandvectorizedoperationslikenp.sqrt().2)PandashandlesstructureddatawithSeriesandDataFrames,supportingtaskslikeloading,cleaning,filterin

Dynamic programming (DP) optimizes the solution process by breaking down complex problems into simpler subproblems and storing their results to avoid repeated calculations. There are two main methods: 1. Top-down (memorization): recursively decompose the problem and use cache to store intermediate results; 2. Bottom-up (table): Iteratively build solutions from the basic situation. Suitable for scenarios where maximum/minimum values, optimal solutions or overlapping subproblems are required, such as Fibonacci sequences, backpacking problems, etc. In Python, it can be implemented through decorators or arrays, and attention should be paid to identifying recursive relationships, defining the benchmark situation, and optimizing the complexity of space.

To implement a custom iterator, you need to define the __iter__ and __next__ methods in the class. ① The __iter__ method returns the iterator object itself, usually self, to be compatible with iterative environments such as for loops; ② The __next__ method controls the value of each iteration, returns the next element in the sequence, and when there are no more items, StopIteration exception should be thrown; ③ The status must be tracked correctly and the termination conditions must be set to avoid infinite loops; ④ Complex logic such as file line filtering, and pay attention to resource cleaning and memory management; ⑤ For simple logic, you can consider using the generator function yield instead, but you need to choose a suitable method based on the specific scenario.

Future trends in Python include performance optimization, stronger type prompts, the rise of alternative runtimes, and the continued growth of the AI/ML field. First, CPython continues to optimize, improving performance through faster startup time, function call optimization and proposed integer operations; second, type prompts are deeply integrated into languages ??and toolchains to enhance code security and development experience; third, alternative runtimes such as PyScript and Nuitka provide new functions and performance advantages; finally, the fields of AI and data science continue to expand, and emerging libraries promote more efficient development and integration. These trends indicate that Python is constantly adapting to technological changes and maintaining its leading position.

Python's socket module is the basis of network programming, providing low-level network communication functions, suitable for building client and server applications. To set up a basic TCP server, you need to use socket.socket() to create objects, bind addresses and ports, call .listen() to listen for connections, and accept client connections through .accept(). To build a TCP client, you need to create a socket object and call .connect() to connect to the server, then use .sendall() to send data and .recv() to receive responses. To handle multiple clients, you can use 1. Threads: start a new thread every time you connect; 2. Asynchronous I/O: For example, the asyncio library can achieve non-blocking communication. Things to note

The core answer to Python list slicing is to master the [start:end:step] syntax and understand its behavior. 1. The basic format of list slicing is list[start:end:step], where start is the starting index (included), end is the end index (not included), and step is the step size; 2. Omit start by default start from 0, omit end by default to the end, omit step by default to 1; 3. Use my_list[:n] to get the first n items, and use my_list[-n:] to get the last n items; 4. Use step to skip elements, such as my_list[::2] to get even digits, and negative step values ??can invert the list; 5. Common misunderstandings include the end index not

Python's datetime module can meet basic date and time processing requirements. 1. You can get the current date and time through datetime.now(), or you can extract .date() and .time() respectively. 2. Can manually create specific date and time objects, such as datetime(year=2025, month=12, day=25, hour=18, minute=30). 3. Use .strftime() to output strings in format. Common codes include %Y, %m, %d, %H, %M, and %S; use strptime() to parse the string into a datetime object. 4. Use timedelta for date shipping
