mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-09 10:38:10 -06:00
Update quickstart.md
This commit is contained in:
@@ -37,7 +37,7 @@ The steps you’ll need to take are:
|
||||
|
||||
1. Vendor the code into your project.
|
||||
1. Set `NOMS_VERSION_NEXT=1` in your environment.
|
||||
1. Decide which type of storage you'd like to use: memory (convenient for playing around), disk, IPFS, or S3. (If you'd to implement a store on top of another type of storage that's possible too; email us or reach out on slack and we can help.)
|
||||
1. Decide which type of storage you'd like to use: memory (convenient for playing around), disk, IPFS, or S3. (If you want to implement a store on top of another type of storage that's possible too; email us or reach out on slack and we can help.)
|
||||
1. Set up and instantiate a database for your storage. Generally, you give a [dataset spec](https://github.com/attic-labs/noms/blob/master/doc/spelling.md) like `mem::mydataset` to a [`config.Resolver`](https://github.com/attic-labs/noms/blob/master/go/config/resolver.go) which gives you a handle to the [`Database`](https://github.com/attic-labs/noms/blob/master/go/datas/database.go) and [`Dataset`](https://github.com/attic-labs/noms/blob/master/go/datas/dataset.go).
|
||||
* **Memory**: no setup required, just instantiate it:
|
||||
```
|
||||
@@ -49,9 +49,10 @@ The steps you’ll need to take are:
|
||||
cfg := config.NewResolver()
|
||||
database, dataset, err := cfg.GetDataset("/path/to/chunks::test") // Dataset name is "test"
|
||||
```
|
||||
* **IPFS**: ??? setup
|
||||
* **IPFS**: identify an IPFS node by directory. If an IPFS node doesn't exist at that directory, one will be created:
|
||||
```
|
||||
????
|
||||
cfg := config.NewResolver()
|
||||
database, dataset, err := cfg.GetDataset("ipfs:/path/to/chunks::test") // Dataset name is "test"
|
||||
```
|
||||
* **S3**: Follow the [S3 setup instructions](https://github.com/attic-labs/noms/blob/master/go/nbs/NBS-on-AWS.md) then instantiate a database and dataset:
|
||||
```
|
||||
@@ -60,46 +61,69 @@ The steps you’ll need to take are:
|
||||
database := datas.NewDatabase(store)
|
||||
dataset := database.GetDataset("aws://dynamo-table:s3-bucket/store-name::test") // Dataset name is "test"
|
||||
```
|
||||
1. Implement using the [Go API](../go-tour.md). If you're just playing around you could try something like this.
|
||||
1. Implement using the [Go API](../go-tour.md). If you're just playing around you could try something like this (source code can be found in [quickstart.go](https://github.com/attic-labs/noms/blob/master/samples/go/quickstart/quickstart.go)).
|
||||
```
|
||||
func newPerson(givenName string, male bool) types.Struct {
|
||||
return types.NewStruct("Person", types.StructData{
|
||||
"given": types.String(givenName),
|
||||
"male": types.Bool(male),
|
||||
})
|
||||
}
|
||||
|
||||
data := types.NewList(database,
|
||||
newPerson("Rickon", true),
|
||||
newPerson("Bran", true),
|
||||
newPerson("Arya", false),
|
||||
newPerson("Sansa", false),
|
||||
// Copyright 2017 Attic Labs, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, version 2.0:
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/attic-labs/noms/go/spec"
|
||||
"github.com/attic-labs/noms/go/types"
|
||||
)
|
||||
fmt.Fprintf(os.Stdout, "data type: %v\n", types.TypeOf(data).Describe())
|
||||
_, err = db.CommitValue(sp.GetDataset(), data)
|
||||
if err != nil {
|
||||
fmt.Fprint(os.Stderr, "Error commiting: %s\n", err)
|
||||
|
||||
// Usage: quickstart /path/to/store::ds
|
||||
func main() {
|
||||
sp, err := spec.ForDataset(os.Args[1])
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Unable to parse spec: %s, error: %s\n", sp, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer sp.Close()
|
||||
|
||||
db := sp.GetDatabase()
|
||||
if headValue, ok := sp.GetDataset().MaybeHeadValue(); !ok {
|
||||
data := types.NewList(sp.GetDatabase(),
|
||||
newPerson("Rickon", true),
|
||||
newPerson("Bran", true),
|
||||
newPerson("Arya", false),
|
||||
newPerson("Sansa", false),
|
||||
)
|
||||
|
||||
fmt.Fprintf(os.Stdout, "data type: %v\n", types.TypeOf(data).Describe())
|
||||
_, err = db.CommitValue(sp.GetDataset(), data)
|
||||
if err != nil {
|
||||
fmt.Fprint(os.Stderr, "Error commiting: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
} else {
|
||||
// type assertion to convert Head to List
|
||||
personList := headValue.(types.List)
|
||||
// type assertion to convert List Value to Struct
|
||||
personStruct := personList.Get(0).(types.Struct)
|
||||
// prints: Rickon
|
||||
fmt.Fprintf(os.Stdout, "given: %v\n", personStruct.Get("given"))
|
||||
}
|
||||
}
|
||||
|
||||
sp, err := spec.ForDataset("<spec from above>")
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Could not create dataset: %s\n", err)
|
||||
return
|
||||
func newPerson(givenName string, male bool) types.Struct {
|
||||
return types.NewStruct("Person", types.StructData{
|
||||
"given": types.String(givenName),
|
||||
"male": types.Bool(male),
|
||||
})
|
||||
}
|
||||
defer sp.Close()
|
||||
|
||||
if headValue, ok := sp.GetDataset().MaybeHeadValue(); !ok {
|
||||
fmt.Fprintf(os.Stdout, "head is empty\n")
|
||||
} else {
|
||||
// type assertion to convert Head to List
|
||||
personList := headValue.(types.List)
|
||||
// type assertion to convert List Value to Struct
|
||||
personStruct := personList.Get(0).(types.Struct)
|
||||
// prints: Rickon
|
||||
fmt.Fprintf(os.Stdout, "given: %v\n", personStruct.Get("given"))
|
||||
}
|
||||
```
|
||||
1. You can inspect data that you've committed via the [noms command-line interface](https://github.com/attic-labs/noms/blob/master/doc/cli-tour.md). Consider creating a [.nomsconfig](https://github.com/attic-labs/noms/blob/master/samples/cli/nomsconfig/README.md) file to save the trouble of writing database specs on the command line.
|
||||
```
|
||||
1. You can inspect data that you've committed via the [noms command-line interface](https://github.com/attic-labs/noms/blob/master/doc/cli-tour.md). For example:
|
||||
```
|
||||
noms log /path/to/store::ds
|
||||
noms show /path/to/store::ds
|
||||
```
|
||||
Try Consider creating a [.nomsconfig](https://github.com/attic-labs/noms/blob/master/samples/cli/nomsconfig/README.md) file to save the trouble of writing database specs on the command line.
|
||||
* Note that Memory tables won't be inspectable because they exist only in the memory of the process that created them.
|
||||
1. Implement pull and merge. The [pull API](../../go/datas/pull.go) is used pull changes from a peer and the [merge API](../../go/merge/) is used to merge changes before commit. There's an [example of merging in the IPFS-based-chat sample
|
||||
app](https://github.com/attic-labs/noms/blob/master/samples/go/ipfs-chat/pubsub.go).
|
||||
|
||||
Reference in New Issue
Block a user