storage
Работа с хранилищем
Общее
namespaces(task_id)
Получает все неймспейсы, которые прикреплены к заданию.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | ID задания |
Результат
# | Тип | Описание |
---|---|---|
1 | таблица | таблица таблиц |
Пример
local storage = require("storage")
local inspect = require("inspect")
storage.put({abc=100}, "simple-space") -- помещаем данные в спейс "simple-space"
storage.put({def=200}) -- помещаем данные в сторадж типа table, id по умолчанию будет как task_id
storage.set("a", "b")
local data,err = storage.namespaces("271ea8c6-d36d-4dd6-afd2-c36b819736af") -- аргумент - ID текщего таска, можно получить из глобальной переменной meta.task_id
if err ~= nil then error(err) end
print(inspect(data))
-- вывод:
--{
-- {
-- name = "271ea8c6-d36d-4dd6-afd2-c36b819736af",
-- type = "k/v"
-- },
-- {
-- name = "simple-space",
-- type = "table"
-- },
-- {
-- name = "271ea8c6-d36d-4dd6-afd2-c36b819736af",
-- type = "table"
-- }
--}
При работе с хранилищем используется три типа данных:
- таблицы
- ключ/значение
- файлы
Для работы с каждым типом существует API. Ниже сгруппированны API для работы с каждым типом данных.
Таблицы
put(table [, space])
Является алиасом put_table
. Добавляет данные в виде таблицы в хранилище.
Параметры
# | Тип | Описание |
---|---|---|
1 | таблица | набор данных |
2 | строка; опционально | пространство |
Результат
Пример
local storage = require("storage")
print(storage.put({abc=100, ["second-value"]=200}))
get_table(space [, params])
Извлекает из хранилища таблицы, привязанные к конкретному спейсу. Внутри таблицы с данными присутствует зарезервированное поле TID, которое может понадобится для последующей работы, например: для удаления записей.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | спейс |
2 | таблица; опционально | параметры |
Результат
# | Тип | Описание |
---|---|---|
1 | таблица | таблица таблиц |
2 | ошибка или nil | ошибка |
Пример
local storage = require("storage")
local inspect = require("inspect")
storage.put({abc=100, ["second-value"]=200}, "simple-space")) -- помещаем данные в спейс "simple-space"
local data,err = storage.get_table("simple-space")
if err ~= nil then error(err) end
print(inspect(data))
-- вывод:
--{
-- {
-- TID = "36ck87rf", -- внутренний индентификатор
-- abc = "100",
-- ["second-value"] = "200"
-- }
-- }
delete_table(table [, TID])
Удаляет все или одну записи в неймспейсе.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | пространство |
2 | строка; опционально | TID конкретной записи |
Пример
local inspect = require("inspect")
local storage = require("storage")
storage.put({abc=100, zyz=200}, 'samplenamespace') -- добавим в пространство samplenamespace таблицу
storage.put({asd=100}, 'samplenamespace') -- добавим в пространство еще запись
print(inspect(storage.get_table('samplenamespace'))) -- выведем все записи из пространства samplenamespace
-- вывод:
-- { {
-- TID = "2ipje041",
-- asd = "100"
-- }, {
-- TID = "urz53m9n",
-- abc = "100",
-- zyz = "200"
-- } }
storage.delete_table('samplenamespace', '2ipje041') -- удалим конкретную подтаблицу с TID urz53m9n
storage.delete_table('samplenamespace') -- удалим все записи из пространства samplenamespace
Ключ/значение
get(key [, space])
Получение значения из хранилища. Примечание: get/set работают в режиме key/value, в отличии от метода put.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | ключ |
2 | строка; опционально | пространство |
Результат
# | Тип | Описание |
---|---|---|
1 | string или nil | данные |
Пример
local storage = require("storage")
print(storage.set("demo-key", "demo-value"))
print(storage.get("demo-key"))
-- вывод:
-- demo-value
set(key, value [, space])
Устанавливает значение value
для ключа key
в заданном пространстве space
. Если пространство не указано, то имя пространства = дата запуска задания
.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | ключ |
2 | строка; опционально | пространство |
Результат
нет возвращаемых значений
Пример
local storage = require("storage")
print(storage.set("demo-key", "demo-value"))
print(storage.get("demo-key"))
-- вывод:
-- demo-value
keys(namespace [, regex_filter])
Получение ключи из пространства. В качестве фильтра может быть использовано регулярное выражение.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | пространство |
2 | таблица; опционально | параметры выборки (filter:string, offset:number, limit:number) |
Результат
# | Тип | Описание |
---|---|---|
1 | таблица | список ключей |
Пример
local storage = require("storage")
storage.set("demo-key", "demo-value", "namespace1")
storage.set("complex-abc-123", "some value", "namespace1")
local keys = storage.keys("namespace1")
for _, k in pairs(keys)
print(k)
end
-- пример с фильтрацией
local keys = storage.keys("namespace1", {filter="abc(.*)", limit=5})
for _, k in pairs(keys)
print(k)
end
delete(key, [, space])
Удаляет запсиь по ключу key
в заданном пространстве space
. Если пространство не указано, то имя пространства = дата запуска задания
.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | ключ |
2 | строка; опционально | пространство |
Результат
нет возвращаемых значений
Пример
local storage = require("storage")
storage.set("demo-key", "demo-value")
storage.delete("demo-key")
clear(namespace)
Удаляет все записи в заданном пространстве space
.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | неймспейс |
Результат
нет возвращаемых значений
Пример
local storage = require("storage")
print(storage.set("demo-key", "demo-value", "space#1"))
print(storage.clear("space#1"))
Файлы
put_file(filename, content)
Сохраняет файл с указанным именем и содержимым в хранилище. После сохранения возвращается идентификатор файла или ошибка.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | название файла |
2 | строка | содержимое файла |
Результат
# | Тип | Описание |
---|---|---|
1 | string или nil | идентификатор файла |
1 | error или nil | ошибка, если что-то пошло не так |
Пример
local storage = require("storage")
local id, err = storage.put_file("demo filename", "lua the best programming language")
if err ~= nil then error(err) end
print('fileid', id)
-- вывод:
-- fileid aBcDeF
get_file(fileid)
Получает содержимое файла из хранилища по его идентификатору.
Параметры
# | Тип | Описание |
---|---|---|
1 | строка | идентификатор файла |
Результат
# | Тип | Описание |
---|---|---|
1 | string или nil | содержимое файла |
2 | error или nil | ошибка, если что-то пошло не так |
Пример
local storage = require("storage")
local content, err = storage.get_file("aBcDeF")
if err ~= nil then error(err) end
print(content)
-- вывод:
-- lua the best programming language
- remove_file