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строка; опциональнопространство

Результат

#ТипОписание
1string или 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строкасодержимое файла

Результат

#ТипОписание
1string или nilидентификатор файла
1error или 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строкаидентификатор файла

Результат

#ТипОписание
1string или nilсодержимое файла
2error или 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