Readme update to include a few words on tags.
This commit is contained in:
parent
bcfe5d44d6
commit
fce2b633ce
67
README.md
67
README.md
@ -162,25 +162,16 @@ $ tree storage/
|
|||||||
...
|
...
|
||||||
└── tags
|
└── tags
|
||||||
└── by_keyword
|
└── by_keyword
|
||||||
└── other-tags
|
├── elegant
|
||||||
├── average
|
│ ├── 0000000000.json -> ../../../data/0000000000.json
|
||||||
│ ├── data
|
│ └── 0000000003.json -> ../../../data/0000000003.json
|
||||||
│ │ └── 0000000004.json -> ../../../../..//data/0000000004.json
|
├── impressive
|
||||||
...
|
│ ├── 0000000000.json -> ../../../data/0000000000.json
|
||||||
├── dirty
|
│ ├── 0000000001.json -> ../../../data/0000000001.json
|
||||||
│ ├── data
|
│ └── 0000000003.json -> ../../../data/0000000003.json
|
||||||
│ │ └── 0000000005.json -> ../../../../..//data/0000000005.json
|
|
||||||
...
|
|
||||||
├── elegant
|
|
||||||
│ ├── data
|
|
||||||
│ │ ├── 0000000000.json -> ../../../../..//data/0000000000.json
|
|
||||||
│ │ └── 0000000003.json -> ../../../../..//data/0000000003.json
|
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
This is very similar to partitions, but there is a bit more complexity here since we eventually search for a car matching a combination of keywords.
|
Tags are very similar to partitions and are used the exact same way for search, update and deletion.
|
||||||
|
|
||||||
**TODO**: explanations about our tag-based search and an example.
|
|
||||||
|
|
||||||
|
|
||||||
## Updating an object
|
## Updating an object
|
||||||
|
|
||||||
@ -204,23 +195,41 @@ cars_by_id.update "86a07924-ab3a-4f46-a975-e9803acba22d", car
|
|||||||
Or, in the case the object may not yet exist:
|
Or, in the case the object may not yet exist:
|
||||||
```Crystal
|
```Crystal
|
||||||
cars_by_id.update_or_create car.id, car
|
cars_by_id.update_or_create car.id, car
|
||||||
|
|
||||||
|
# Search by partitions: all blue cars.
|
||||||
|
pp! cars_by_color.get "blue"
|
||||||
|
|
||||||
|
# Search by tags: all elegant cars.
|
||||||
|
pp! cars_by_keyword.get "elegant"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Changing a value that is related to a partition or a tag will automatically do what you would expect: de-index then re-index.
|
||||||
|
You won't find yourself with a bunch of invalid symbolic links all over the place.
|
||||||
|
|
||||||
## Removing an object
|
## Removing an object
|
||||||
|
|
||||||
```Crystal
|
```Crystal
|
||||||
|
# Remove a value based on an index.
|
||||||
cars_by_id.delete "86a07924-ab3a-4f46-a975-e9803acba22d"
|
cars_by_id.delete "86a07924-ab3a-4f46-a975-e9803acba22d"
|
||||||
|
|
||||||
|
# Remove a value based on a partition.
|
||||||
cars_by_color.delete "red"
|
cars_by_color.delete "red"
|
||||||
cars_by_color.delete "red", do |car|
|
cars_by_color.delete "blue", do |car|
|
||||||
car.keywords.empty
|
car.keywords.empty
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Remove a value based on a tag.
|
||||||
|
cars_by_keyword.delete "shiny"
|
||||||
|
cars_by_keyword.delete "elegant", do |car|
|
||||||
|
car.name == "GTI"
|
||||||
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
In this last example, we apply the function on red cars only.
|
In this code snippet, we apply a function on blue cars only;
|
||||||
|
and blue cars are only removed if they don't have any associated keywords.
|
||||||
|
Same thing for elegant cars.
|
||||||
This represents a performance boost compared to applying the function on all the cars.
|
This represents a performance boost compared to applying the function on all the cars.
|
||||||
|
|
||||||
|
|
||||||
# Complete example
|
# Complete example
|
||||||
|
|
||||||
```Crystal
|
```Crystal
|
||||||
@ -292,11 +301,10 @@ pp! cars_by_name.get "Corvet"
|
|||||||
# based on a partition (print all red cars)
|
# based on a partition (print all red cars)
|
||||||
pp! cars_by_color.get "red"
|
pp! cars_by_color.get "red"
|
||||||
|
|
||||||
# based on a tag
|
# based on a tag (print all fast cars)
|
||||||
pp! cars_by_keyword.get "fast"
|
pp! cars_by_keyword.get "fast"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############
|
############
|
||||||
# Updating #
|
# Updating #
|
||||||
############
|
############
|
||||||
@ -314,7 +322,11 @@ cars_by_name.update "Bullet-GT", car # the name changed
|
|||||||
car = Car.new "Mustang", "red", [] of String
|
car = Car.new "Mustang", "red", [] of String
|
||||||
cars_by_name.update_or_create car.name, car
|
cars_by_name.update_or_create car.name, car
|
||||||
|
|
||||||
|
# We all know it, elegant cars are also expensive.
|
||||||
|
cars_by_keyword.get("elegant").each do |car|
|
||||||
|
car.keywords << "expensive"
|
||||||
|
cars_by_name.update car.name, car
|
||||||
|
end
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Deleting... #
|
# Deleting... #
|
||||||
@ -328,9 +340,8 @@ cars_by_color.delete "red"
|
|||||||
# based on a color (but not only)
|
# based on a color (but not only)
|
||||||
cars_by_color.delete "blue", &.name.==("GTI")
|
cars_by_color.delete "blue", &.name.==("GTI")
|
||||||
|
|
||||||
## TAG-based deletion, soon.
|
# based on a keyword
|
||||||
# # based on a keyword
|
cars_by_keyword.delete "solid"
|
||||||
# cars_by_keyword.delete "solid"
|
# based on a keyword (but not only)
|
||||||
# # based on a keyword (but not only)
|
cars_by_keyword.delete "fast", &.name.==("Corvet")
|
||||||
# cars_by_keyword.delete "fast", &.name.==("Corvet")
|
|
||||||
```
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user