본문으로 건너뛰기

타입

모든 타입은 aerospike_py 또는 aerospike_py.types 에서 import 가능.

from aerospike_py import Record, ExistsResult, ReadPolicy, WritePolicy, WriteMeta

Return Type (NamedTuple)

모든 return type 이 attribute access 와 tuple unpacking 둘 다 지원.

Record

반환자: get(), select(), operate(), Query.results()

FieldType설명
keyAerospikeKey | Nonerecord key
metaRecordMetadata | Nonegeneration 과 TTL
binsdict[str, Any] | Nonebin value
record: Record = client.get(key)
print(record.bins) # attribute access
_, meta, bins = record # tuple unpacking

RecordMetadata

FieldType설명
genintgeneration (optimistic lock 버전)
ttlinttime-to-live (초)

AerospikeKey

FieldType설명
namespacestrnamespace
set_namestrset 이름
user_keystr | int | bytes | Noneprimary key (POLICY_KEY_DIGESTNone)
digestbytes20-byte RIPEMD-160 digest

BatchRecord

반환자: batch operation (BatchWriteResult.batch_records 내부)

FieldType설명
keyAerospikeKey | Nonerecord key
resultintper-record result code (0 = success)
recordRecord | Nonerecord 데이터 (operation 실패 시 None)
in_doubtbooltransient error 에도 불구하고 write 가 완료되었을 수 있는지 (default False)
results = client.batch_operate(keys, ops)
for br in results.batch_records:
if br.result == 0 and br.record is not None:
print(br.record.bins)

BatchWriteResult

반환자: batch_write(), batch_operate(), batch_remove(), batch_write_numpy() (sync async). Sync 와 async batch_read()LazyBatchRecords 반환.

FieldType설명
batch_recordslist[BatchRecord]per-record 결과

BatchRecords

TypeAlias = dict[UserKey, AerospikeRecord]. import 호환성을 위해 유지되는 historical alias. PR-374 가 batch_read()LazyBatchRecords 로 전환; 동일 dict shape 가 필요하면 그 handle 에 .to_dict() 호출. 현재 어떤 method 도 이 alias 를 반환하지 않음.

LazyBatchRecords

반환자: sync async batch_read() — raw Rust 결과의 zero-conversion wrapper. Materialisation 은 명시 method 호출 (또는 lazy + cached to_dict() 를 proxy 하는 dict-like Mapping dunder) 까지 지연됨.

Method / PropertyType설명
to_dict()dict[UserKey, dict[str, Any]]dict[user_key, bins_dict] 로 materialise. digest-only 와 failed record 제외.
to_numpy(dtype)NumpyBatchRecordsstructured array 로 materialise. dtype np.dtype object 여야 함 (예: np.dtype([("age","<i4"),("height","<f4"),("name","S10")])). structured dtype 의 각 field name 이 동명 bin 으로 매핑; list-of-tuples shorthand 와 single-field string 은 auto-promote 안 됨 — 먼저 np.dtype(...) 로 wrap. per-record fill loop 가 GIL 해제 (py.detach) 상태로 실행되어 sibling 작업 (torch inference, 다른 asyncio task) 이 buffer fill 중 GIL 보유 가능. 실패/missing read (result_code != 0) 는 row 가 dtype zero value 로 남음 — downstream math 전에 항상 result_codes 로 mask.
batch_recordslist[BatchRecord]호환 path: lazy NamedTuple 변환.
found_count()int성공 record 수 (변환 불필요).
keys()dict_keysdict-style key view, to_dict().keys() 와 mirror (missing/failed record 제외).
all_user_keys()list[UserKey | None]모든 batch record 의 user_key 를 request 순서로 — batch_recordsNumpyBatchRecords data array 와 positional align. digest-only request (user_key element 없음) 는 slot 에 None yield, 그래서 zip(handle.all_user_keys(), handle.batch_records) 가 항상 모든 record 를 requested key 와 pair.
iter_records()Iterator[BatchRecord]모든 record (digest-only 와 failed 포함) 를 삽입 순서로 순회.
items() / values() / __iter__dict viewsdict-like backward-compat — cached to_dict() 와 동일 의미.
lazy_records[user_key]dict[str, Any]dict-style item 접근 (__getitem__).
user_key in lazy_recordsbooldict-style membership (__contains__).
lazy_records.get(user_key, default=None)dict[str, Any] | Anydict-style get, 선택적 default; dict.get 의미 mirror.
len(lazy_records)intdict-view cardinality — len(lazy_records.to_dict()) 와 매칭 (성공한 read, user_keyrecord body 보유). 빠름: pure-Rust filter+count, PyDict 할당 없음. raw record 수 (missing read / per-record failure 포함) 는 len(lazy_records.batch_records).
release_cache()None첫 Mapping 접근 / to_dict() 가 빌드한 cached PyDict 를 drop, raw Rust record 는 유지 (그래서 batch_records, iter_records(), all_user_keys(), found_count(), to_numpy(dtype) 가 계속 동작). 이후 Mapping 접근이 cache 를 lazy 하게 rebuild. 더 이상 필요 없는 대형 batch materialisation 후 유용.

ExistsResult

반환자: exists()

FieldType설명
keyAerospikeKey | Nonerecord key
metaRecordMetadata | Nonerecord 없으면 None
result: ExistsResult = client.exists(key)
if result.meta is not None:
print(f"gen={result.meta.gen}")

InfoNodeResult

반환자: info_all()

FieldType설명
node_namestrcluster node 이름
error_codeint성공 시 0
responsestrinfo response string

OperateOrderedResult

반환자: operate_ordered()

FieldType설명
keyAerospikeKey | Nonerecord key
metaRecordMetadata | Nonerecord metadata
ordered_binslist[BinTuple]순서 보존된 operation 결과

BinTuple

FieldType설명
namestrbin 이름
valueAnybin value

Return Type 빠른 참조

MethodReturn Type
get(), select()Record
exists()ExistsResult
operate()Record
operate_ordered()OperateOrderedResult
info_all()list[InfoNodeResult]
batch_read() (sync 와 async)LazyBatchRecords.to_dict() 또는 .to_numpy(dtype) 로 materialise
batch_write(), batch_operate(), batch_remove()BatchWriteResult (batch_records: list[BatchRecord])
batch_write_numpy()BatchWriteResult
Query.results()list[Record]

Input Type (TypedDict)

모든 field 는 선택적 (total=False).

ClientConfig

사용자: aerospike_py.client(config), AsyncClient(config)

FieldTypeDefault설명
hostslist[tuple[str, int]]requiredseed node
cluster_namestr | None예상 cluster name. None 은 field 생략과 동일 처리.
auth_modeintAUTH_INTERNALAUTH_INTERNAL, AUTH_EXTERNAL, AUTH_PKI
userstrauth username
passwordstrauth password
timeoutint1000connection timeout (ms)
idle_timeoutintconnection idle timeout (ms)
max_conns_per_nodeint100node 당 최대 connection
min_conns_per_nodeint0pre-warm connection
tend_intervalint1000cluster tend interval (ms)
use_services_alternateboolfalsealternate service address 사용

ReadPolicy

사용자: get(), select(), exists()

FieldTypeDefault설명
socket_timeoutint30000socket timeout (ms)
total_timeoutint1000총 transaction timeout (ms)
max_retriesint2최대 retry
sleep_between_retriesint0retry 간 sleep (ms)
timeout_delayint0deadline 이후 request timeout 까지의 delay (ms). 재사용 connection 이 stale response 를 보지 않도록 socket drain.
filter_expressionAnyaerospike_py.exp 로 빌드된 expression filter.
replicaintPOLICY_REPLICA_SEQUENCEreplica 선택 알고리즘.
read_mode_apintPOLICY_READ_MODE_AP_ONEAP namespace read consistency. aerospike-core ConsistencyLevel 로 매핑.
read_touch_ttl_percentint0original write TTL 의 N% 이내일 때 read 시 TTL reset (server v8+). 0 = server default, -1 = reset 안 함, 1..=100 = percent.

WritePolicy

사용자: put(), remove(), touch(), append(), prepend(), increment(), remove_bin(), operate(), operate_ordered()

FieldTypeDefault설명
socket_timeoutint30000socket timeout (ms)
total_timeoutint1000총 transaction timeout (ms)
max_retriesint0최대 retry
sleep_between_retriesint0retry 간 sleep (ms)
timeout_delayint0deadline 이후 request timeout 까지의 delay (ms).
durable_deleteboolfalsedurable delete (Enterprise)
keyintPOLICY_KEY_DIGESTkey send policy
existsintPOLICY_EXISTS_IGNOREexistence policy
genintPOLICY_GEN_IGNOREgeneration policy
commit_levelintPOLICY_COMMIT_LEVEL_ALLcommit level
ttlint0record TTL (초)
filter_expressionAnyexpression filter (aerospike_py.exp).
read_mode_apintPOLICY_READ_MODE_AP_ONEread-after-write operate() op 의 AP read consistency.
read_touch_ttl_percentint0write TTL 의 N% 이내 read 시 TTL reset (server v8+).

BatchPolicy

사용자: batch_read(), batch_operate(), batch_write(), batch_remove()

Transport / batch-level field

FieldTypeDefault설명
socket_timeoutint30000socket timeout (ms)
total_timeoutint1000총 transaction timeout (ms)
max_retriesint2최대 retry
sleep_between_retriesint0retry 간 sleep (ms)
timeout_delayint0deadline 이후 request timeout 까지의 delay (ms).
concurrencyintBATCH_CONCURRENCY_PARALLELper-node dispatch mode: BATCH_CONCURRENCY_SEQUENTIAL (한 번에 한 node) 또는 BATCH_CONCURRENCY_PARALLEL (모든 node 병렬 — default). Batch Concurrency constants 참조. 다른 값은 ValueError.
filter_expressionAnyexpression filter
allow_inlinebooltrue수신 thread 에서 server inline 처리 허용
allow_inline_ssdboolfalseSSD namespace 의 inline 처리 허용
respond_all_keysbooltrueper-record error 와 관계없이 모든 key 시도
replicaintPOLICY_REPLICA_SEQUENCEreplica 선택.
read_mode_apintPOLICY_READ_MODE_AP_ONEbatch_read 의 AP read consistency.
read_touch_ttl_percentint0write TTL 의 N% 이내 read 시 TTL reset (server v8+).

Write default (batch_write 가 사용)

이 field 들은 batch_write() 호출의 모든 record 에 적용. Per-record WriteMeta 가 override — precedence rule 참조.

FieldTypeDefault설명
keyintPOLICY_KEY_DIGESTkey send policy. server-side 에 user key 저장하려면 POLICY_KEY_SEND.
existsintPOLICY_EXISTS_UPDATEexistence policy (UPDATE, CREATE_ONLY, REPLACE 등).
genintPOLICY_GEN_IGNOREgeneration policy. 참고: batch-level 에선 POLICY_GEN_* enum index. Per-record WriteMeta["gen"] 은 예상 generation 값.
commit_levelintPOLICY_COMMIT_LEVEL_ALLcommit level (ALL 또는 MASTER).
durable_deleteboolfalsedurable delete (Enterprise 3.10+).
ttlint0record TTL (초) (0 = namespace default, -1 = 영원, -2 = update 안 함).

QueryPolicy

사용자: Query.results(), Query.foreach()

FieldTypeDefault설명
socket_timeoutint30000socket timeout (ms)
total_timeoutint0총 timeout (0 = 무제한)
max_retriesint2최대 retry
sleep_between_retriesint0retry 간 sleep (ms)
timeout_delayint0deadline 이후 request timeout 까지의 delay (ms).
max_recordsint0최대 record (0 = 전체)
records_per_secondint0node 당 rate limit (0 = 무제한).
max_concurrent_nodesint0병렬 node query 제한 (0 = 무제한).
record_queue_sizeint1024record 결과의 buffer capacity.
filter_expressionAnyexpression filter.
replicaintPOLICY_REPLICA_SEQUENCEreplica 선택.
read_mode_apintPOLICY_READ_MODE_AP_ONEAP read consistency.
read_touch_ttl_percentint0write TTL 의 N% 이내 read 시 TTL reset (server v8+).
expected_durationintQUERY_DURATION_LONGquery duration 에 대한 server hint (QUERY_DURATION_LONG / _SHORT / _LONG_RELAX_AP).
include_bin_databooltrue결과에 bin payload 포함. key/metadata 만 fetch 하려면 False.
partition_filterPartitionFilter(전체 4096)query/scan 을 partition subset 으로 제한. aerospike_py.partition_filter_*() helper 사용.

ScanPolicy

사용자: where() predicate 없는 client.scan()client.query() 호출. 공식 Python C client 의 ScanPolicy mirror. 현재 Rust layer 가 scan 호출을 QueryPolicy parser 로 routing — aerospike-core 가 별도 ScanPolicy struct 를 노출하면 user-facing type 변경 없이 scan path 가 전용 parser 로 전환. issue #316 참조.

FieldTypeDefault설명
socket_timeoutint30000socket timeout (ms).
total_timeoutint0총 timeout (0 = 무제한).
max_retriesint2최대 retry.
sleep_between_retriesint0retry 간 sleep (ms).
timeout_delayint0deadline 이후 request timeout 까지의 delay (ms).
filter_expressionAnyexpression filter.
replicaintPOLICY_REPLICA_SEQUENCEreplica 선택.
read_mode_apintPOLICY_READ_MODE_AP_ONEAP read consistency.
records_per_secondint0node 당 rate limit (0 = 무제한; server 4.7+).
max_recordsint0대략적 최대 반환 record (0 = 전체; server 6.0+).
durable_deleteboolfalsebackground scan-write durable delete (Enterprise 3.10+).
ttlint0background scan-write 의 default TTL.
partition_filterPartitionFilter(전체 4096)scan 을 partition subset 으로 제한.

BatchReadPolicy

사용자: batch_read() 의 per-record policy.

FieldTypeDefault설명
read_touch_ttl_percentint0write TTL 의 N% 이내 read 시 TTL reset (server v8+). 0 = server default, -1 = reset 안 함, 1..=100 = percent.
filter_expressionAnyexpression filter. 실패한 record 는 BatchRecord.result == FILTERED_OUT 반환.

BatchDeletePolicy

사용자: batch_remove() 의 batch-level policy. Per-record override 는 BatchDeleteMeta.

FieldTypeDefault설명
genintPOLICY_GEN_IGNOREgeneration policy enum (POLICY_GEN_*).
keyintPOLICY_KEY_DIGESTdelete 와 함께 user key send (XDR-friendly).
commit_levelintPOLICY_COMMIT_LEVEL_ALLcommit level.
durable_deleteboolfalsetombstone 남기기 (Enterprise 3.10+).
filter_expressionAnyexpression filter.

BatchDeleteMeta

batch_remove() 의 per-record meta. keys 인자의 (key, meta) tuple 두 번째 element 로 전달. gen 설정 시 CAS-style "generation 일치 시에만 delete" 의미 활성화 — generation 이 advance 했으면 server 가 per-record GENERATION_ERROR 반환.

FieldType설명
genint예상 generation. 이 설정 시 POLICY_GEN_EQ 가 함의됨.
keyintkey send policy (POLICY_KEY_DIGEST / POLICY_KEY_SEND).
commit_levelintcommit level (POLICY_COMMIT_LEVEL_ALL / _MASTER).
durable_deletebooldurable delete (Enterprise 3.10+).
# CAS delete: generation 이 여전히 3 일 때만 user_1 delete.
client.batch_remove([
(("test", "demo", "user_1"), {"gen": 3}),
("test", "demo", "user_2"), # bare key, CAS 없음
])

BatchUDFPolicy

사용자: batch_apply() 의 batch-level UDF policy. Per-record override 는 BatchUDFMeta. Transport-level option (timeout, retry, concurrency 등) 은 BatchPolicy 에 있으며 batch_apply() 에 전달하는 같은 policy dict 로 merge.

FieldTypeDefault설명
commit_levelintPOLICY_COMMIT_LEVEL_ALLcommit level (POLICY_COMMIT_LEVEL_ALL / _MASTER).
ttlint0record TTL (초) (0 = namespace default, -1 = 영원, -2 = update 안 함).
keyintPOLICY_KEY_DIGESTkey send policy (POLICY_KEY_DIGEST / POLICY_KEY_SEND).
durable_deleteboolfalserecord delete UDF 의 durable delete (Enterprise 3.10+).
filter_expressionAny각 record 에 적용되는 expression filter. 필터 실패한 record 는 BatchRecord.result == FILTERED_OUT 반환.

BatchUDFMeta

batch_apply() 의 per-record meta. keys 인자의 (key, meta) tuple 두 번째 element 로 전달. 특정 record 에 대해 UDF 호출 shape 와 policy field 둘 다 override 가능한 single flat dict (BatchDeleteMeta 매칭).

FieldType설명
modulestr이 record 의 UDF module 이름 override. batch_apply()module 인자가 fallback.
functionstr이 record 의 UDF function 이름 override.
argslist[Any]인자 list override. [] 명시 전달 시 default args clear.
ttlint이 record 의 TTL (초) override (WriteMeta.ttl 과 동일 의미).
commit_levelintcommit level override.
keyintkey send policy override (POLICY_KEY_DIGEST / POLICY_KEY_SEND).
durable_deletebooldurable_delete override.
노트

filter_expressionBatchUDFMeta허용되지 않음 — batch-level BatchUDFPolicy 에 설정. (Per-record filter_expression 은 aerospike-core 2.0 에서 unwired; BatchDeleteMeta shape 와 매칭.)

# 다수 key 에 같은 UDF apply.
keys = [("test", "demo", f"u_{i}") for i in range(10)]
results = client.batch_apply(keys, "my_udf", "increment_counter", [1])

# Per-record override: 한 record 에 다른 args / 더 긴 TTL.
results = client.batch_apply(
[
("test", "demo", "u_1"), # default args 사용
(("test", "demo", "u_2"), {"args": [5], "ttl": 3600}),
],
"my_udf", "increment_counter", args=[1],
)

PartitionFilter

query/scan 을 partition subset 으로 scoping 하는 opaque handle (server 6.0+). 모듈 레벨 helper 로 생성:

import aerospike_py

pf_all = aerospike_py.partition_filter_all()
pf_one = aerospike_py.partition_filter_by_id(42) # 단일 partition (0..4095)
pf_range = aerospike_py.partition_filter_by_range(0, 1024) # partition 의 1/4
records = client.query("test", "demo").results(policy={"partition_filter": pf_range})

handle 은 mutable internal state (Arc<Mutex<Vec<PartitionStatus>>>) 보유. aerospike-py 가 parse 시 내부 filter 를 clone 해 user handle 이 in-flight query state mutation 으로부터 격리됨. 이전 run 이 멈춘 곳부터 scan 을 의도적으로 resume 하려면 같은 handle 을 여러 results() 호출에 전달 — v2 cursor 의미는 issue #318 참조.

AdminPolicy

사용자: 모든 admin_* method, index operation, truncate()

FieldTypeDefault설명
timeoutint1000timeout (ms)

WriteMeta

사용자: put(), remove(), touch(), operate()meta 파라미터, 그리고 batch_write() 에서 per-record 로 third tuple element (key, bins, meta).

batch_write() 에서 per-record WriteMeta 에 설정된 field 는 대응하는 batch-level BatchPolicy default 를 override — precedence rule 참조.

FieldType설명
genint예상 generation. 이 설정 시 POLICY_GEN_EQ 함의 (CAS-style write).
ttlintrecord TTL (초). 특수 값: 0 = namespace default, -1 = 영원, -2 = update 안 함.
keyintkey send policy (POLICY_KEY_DIGEST / POLICY_KEY_SEND).
existsintexistence policy (POLICY_EXISTS_*).
commit_levelintcommit level (POLICY_COMMIT_LEVEL_ALL / _MASTER).
durable_deletebooldurable delete (Enterprise 3.10+).

Write field 우선순위 (batch_write)

모든 write field 에 대해 per-record WriteMeta 가 항상 batch-level BatchPolicy 보다 우위:

FieldBatchPolicy (batch-level)WriteMeta (per-record)비고
ttl양쪽 의미 동일.
keyserver-side 에 user key 저장하려면 POLICY_KEY_SEND.
exists예: upsert-fail-on-exists 를 위한 POLICY_EXISTS_CREATE_ONLY.
gen✅ (enum index)✅ (예상 값)비대칭: batch-level = POLICY_GEN_* enum index; per-record = POLICY_GEN_EQ 를 강제하는 numeric generation.
commit_level
durable_delete

Privilege

사용자: admin_create_role(), admin_grant_privileges(), admin_revoke_privileges()

FieldType설명
codeint | strprivilege code constant (PRIV_READ, PRIV_WRITE 등) 또는 canonical name ("read", "read-write" 등)
nsstrnamespace scope (빈 문자 = global)
setstrset scope (빈 문자 = namespace-wide)

UserInfo

반환자: admin_query_user_info(), admin_query_users_info()

FieldType설명
userstrusername
roleslist[str]할당된 role
conns_in_useint활성 connection

RoleInfo

반환자: admin_query_role(), admin_query_roles()

FieldType설명
namestrrole 이름
privilegeslist[Privilege]할당된 privilege
allowlistlist[str]IP allowlist
read_quotaintread quota
write_quotaintwrite quota