본문으로 건너뛰기
버전: In Development

Types

aerospike-py는 반환값에 NamedTuple 클래스를, 입력 파라미터에 TypedDict 클래스를 사용합니다. 모든 타입은 최상위 패키지 또는 aerospike_py.types에서 import할 수 있습니다.

from aerospike_py import Record, ExistsResult, ReadPolicy, WritePolicy, WriteMeta
# 또는
from aerospike_py.types import Record, ExistsResult, ReadPolicy, WritePolicy, WriteMeta

반환 타입 (NamedTuple)

NamedTuple 반환 타입은 속성 접근과 튜플 언패킹을 모두 지원합니다 (하위 호환성).

Record

읽기 및 operate 메서드가 반환하는 전체 레코드입니다.

필드타입설명
keyAerospikeKey | None레코드 키 (POLICY_KEY_DIGEST이면 None)
metaRecordMetadata | None레코드 메타데이터
binsdict[str, Any] | None빈 이름-값 쌍

반환하는 메서드: get(), select(), operate(), Query.results()

record: Record = client.get(key)
print(record.meta.gen) # 속성 접근
print(record.bins) # {"name": "Alice", "age": 30}

key, meta, bins = record # 튜플 언패킹 (하위 호환)

RecordMetadata

generation과 TTL을 포함하는 레코드 메타데이터입니다.

필드타입설명
genint레코드 generation (낙관적 잠금 버전)
ttlint레코드 TTL (초 단위)
record = client.get(key)
print(record.meta.gen) # 1
print(record.meta.ttl) # 2591998

AerospikeKey

서버가 반환하는 레코드 키입니다.

필드타입설명
namespacestr네임스페이스 이름
set_namestr세트 이름
user_keystr | int | bytes | None사용자 제공 기본 키 (POLICY_KEY_DIGEST이면 None)
digestbytes20바이트 RIPEMD-160 다이제스트
record = client.get(key, policy={"key": aerospike_py.POLICY_KEY_SEND})
print(record.key.namespace) # "test"
print(record.key.set_name) # "demo"
print(record.key.user_key) # "user1"

BatchRecord

배치 작업 내의 개별 레코드 결과입니다 (BatchWriteResult.batch_records 내부).

필드타입설명
keyAerospikeKey | None레코드 키
resultint개별 레코드 결과 코드 (0 = 성공)
recordRecord | None레코드 데이터 (작업 실패 시 None)
in_doubtbool일시적 전송 오류 후에도 쓰기가 완료됐을 수 있는지 (기본값 False). PR-374에서 추가됨 — 기존의 key, result, record = br 위치 언패킹 코드는 깨지므로 속성 접근(br.in_doubt)으로 마이그레이션.
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

배치 쓰기 작업의 전체 결과를 담는 NamedTuple 컨테이너입니다.

반환하는 메서드: batch_write(), batch_operate(), batch_remove(), batch_write_numpy() (sync async). sync 및 async batch_read()LazyBatchRecords를 반환합니다.

필드타입설명
batch_recordslist[BatchRecord]개별 레코드 결과 리스트

BatchRecords

TypeAlias = dict[UserKey, AerospikeRecord]. import-compat 용도로 유지되는 historical alias. PR-374에서 batch_read()LazyBatchRecords를 반환하도록 바뀌었고, 해당 핸들에서 .to_dict()를 호출하면 이 alias가 지칭하는 dict shape와 동일한 결과를 얻습니다. 현재 어떤 메서드도 이 alias를 직접 반환하지 않습니다.

LazyBatchRecords

반환하는 메서드: sync 및 async batch_read() — raw Rust 결과를 zero-conversion으로 감싼 핸들. Materialise는 명시적 메서드 호출(또는 dict-style Mapping dunder — lazy + cached to_dict() view 위에서 동작)로 지연됩니다.

메서드 / 속성타입설명
to_dict()dict[UserKey, dict[str, Any]]dict[user_key, bins_dict]로 materialise. digest-only 및 실패한 record는 제외됨.
to_numpy(dtype)NumpyBatchRecords구조화 배열로 materialise. dtypenp.dtype 객체여야 합니다 (예: np.dtype([("age","<i4"),("height","<f4"),("name","S10")])). 각 dtype field 이름은 동일 이름의 bin에 매핑됩니다 — list-of-tuples shorthand나 단일 field string은 auto-promote 되지 않으니 np.dtype(...)으로 감싸세요. per-record fill loop은 py.detach로 GIL을 release하므로 sibling 작업(torch 추론, 다른 asyncio task)이 fill 중에도 GIL을 잡을 수 있습니다. 실패/missing reads (result_code != 0)는 dtype의 zero value로 남으므로, downstream 연산 전 result_codes로 마스킹하세요.
batch_recordslist[BatchRecord]Compat 경로: lazy NamedTuple 변환.
found_count()int성공 record 수 (변환 없음).
keys()dict_keysdict-style keys view — to_dict().keys()와 동일 (missing/실패 제외).
all_user_keys()list[UserKey | None]모든 batch record의 user_key를 request 순서대로 — batch_records / NumpyBatchRecords data array와 positional 정렬됨. digest-only 요청 슬롯은 None이 들어가 zip(handle.all_user_keys(), handle.batch_records)가 모든 record를 그 요청 키 (또는 None)와 짝지을 수 있습니다.
iter_records()Iterator[BatchRecord]모든 record (digest-only 및 실패 포함)를 삽입 순서로 순회.
items() / values() / __iter__dict viewsdict-like 하위 호환 — cached to_dict()와 동일 시맨틱.
lazy_records[user_key]dict[str, Any]dict-style item 접근 (__getitem__).
user_key in lazy_recordsbooldict-style 멤버십 (__contains__).
lazy_records.get(user_key, default=None)dict[str, Any] | Anydict-style getdict.get 시맨틱 동일.
len(lazy_records)intDict-view cardinality — len(lazy_records.to_dict()) 일치 (user_key + record body 있는 성공 read만). 빠름: 순수 Rust filter+count로 PyDict 할당 없음. raw record 수 (missing/실패 포함)는 len(lazy_records.batch_records) 사용.
release_cache()None첫 Mapping 접근 / to_dict()에서 build된 cached PyDict를 drop. raw Rust records(따라서 batch_records, iter_records(), all_user_keys(), found_count(), to_numpy(dtype))는 유지. 후속 Mapping 접근은 lazy하게 cache를 재build. 큰 배치 materialise 후 더이상 dict가 필요하지 않을 때 유용.

ExistsResult

존재 여부 확인 결과입니다.

필드타입설명
keyAerospikeKey | None레코드 키
metaRecordMetadata | None메타데이터 (레코드가 없으면 None)

반환하는 메서드: exists()

result: ExistsResult = client.exists(key)
if result.meta is not None:
print(f"gen={result.meta.gen}")

_, meta = result # 튜플 언패킹

InfoNodeResult

클러스터 노드별 info 명령 결과입니다.

필드타입설명
node_namestr클러스터 노드 이름
error_codeint성공 시 0
responsestrInfo 응답 문자열

반환하는 메서드: info_all()

results: list[InfoNodeResult] = client.info_all("namespaces")
for result in results:
print(f"{result.node_name}: {result.response}")

OperateOrderedResult

operate_ordered()의 순서 보존 결과입니다.

필드타입설명
keyAerospikeKey | None레코드 키
metaRecordMetadata | None레코드 메타데이터
ordered_binslist[BinTuple]순서가 보존된 연산 결과

반환하는 메서드: operate_ordered()

result: OperateOrderedResult = client.operate_ordered(key, ops)
for bin_tuple in result.ordered_bins:
print(f"{bin_tuple.name} = {bin_tuple.value}")

BinTuple

순서 보존 결과에서 사용되는 단일 빈 이름-값 쌍입니다.

필드타입설명
namestr빈 이름
valueAny빈 값

API → 반환 타입 빠른 참조

메서드반환 타입
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]

입력 타입 (TypedDict)

TypedDict 입력 타입은 policymeta 파라미터에 대한 IDE 자동완성과 타입 체크를 제공합니다. 모든 필드는 선택적(total=False)입니다.

ClientConfig

클라이언트 생성을 위한 설정 딕셔너리입니다.

사용하는 메서드: aerospike_py.client(config), AsyncClient(config)

필드타입기본값설명
hostslist[tuple[str, int]]필수클러스터 시드 노드
cluster_namestr예상 클러스터 이름
auth_modeintAUTH_INTERNAL인증 모드 (AUTH_INTERNAL, AUTH_EXTERNAL, AUTH_PKI)
userstr인증 사용자명
passwordstr인증 비밀번호
timeoutint1000연결 타임아웃 (ms)
idle_timeoutint연결 유휴 타임아웃 (ms)
max_conns_per_nodeint노드당 최대 연결 수
min_conns_per_nodeint노드당 최소 연결 수
tend_intervalint클러스터 tend 간격 (ms)
use_services_alternateboolFalse대체 서비스 주소 사용
config: ClientConfig = {
"hosts": [("127.0.0.1", 3000)],
"cluster_name": "docker",
"timeout": 5000,
}
client = aerospike_py.client(config).connect()

ReadPolicy

읽기 작업을 위한 정책입니다.

사용하는 메서드: get(), select(), exists()

필드타입기본값설명
socket_timeoutint30000소켓 유휴 타임아웃 (ms)
total_timeoutint1000전체 트랜잭션 타임아웃 (ms)
max_retriesint2최대 재시도 횟수
sleep_between_retriesint0재시도 간 대기 시간 (ms)
timeout_delayint0데드라인을 지난 요청을 타임아웃 처리하기 전 대기 시간 (ms). 소켓을 비우고 재사용된 연결에서 오래된 응답을 읽지 않도록 합니다.
filter_expressionAnyaerospike_py.exp로 빌드한 Expression 필터
replicaintPOLICY_REPLICA_SEQUENCE레플리카 알고리즘
read_mode_apintPOLICY_READ_MODE_AP_ONEAP 읽기 일관성 수준
policy: ReadPolicy = {
"total_timeout": 5000,
"max_retries": 3,
}
record = client.get(key, policy=policy)

WritePolicy

쓰기 작업을 위한 정책입니다.

사용하는 메서드: put(), remove(), touch(), append(), prepend(), increment(), remove_bin(), operate(), operate_ordered()

필드타입기본값설명
socket_timeoutint30000소켓 유휴 타임아웃 (ms)
total_timeoutint1000전체 트랜잭션 타임아웃 (ms)
max_retriesint0최대 재시도 횟수
timeout_delayint0데드라인을 지난 요청을 타임아웃 처리하기 전 대기 시간 (ms).
durable_deleteboolFalse영구 삭제 사용 (Enterprise 전용)
keyintPOLICY_KEY_DIGEST키 전송 정책 (POLICY_KEY_DIGEST, POLICY_KEY_SEND)
existsintPOLICY_EXISTS_IGNORE존재 정책 (POLICY_EXISTS_*)
genintPOLICY_GEN_IGNOREGeneration 정책 (POLICY_GEN_IGNORE, POLICY_GEN_EQ, POLICY_GEN_GT)
commit_levelintPOLICY_COMMIT_LEVEL_ALL커밋 수준 (POLICY_COMMIT_LEVEL_ALL, POLICY_COMMIT_LEVEL_MASTER)
ttlint0레코드 TTL (초)
filter_expressionAnyaerospike_py.exp로 빌드한 Expression 필터
policy: WritePolicy = {
"key": aerospike_py.POLICY_KEY_SEND,
"exists": aerospike_py.POLICY_EXISTS_CREATE_ONLY,
}
client.put(key, bins, policy=policy)

BatchPolicy

배치 작업을 위한 정책입니다.

사용하는 메서드: batch_read(), batch_operate(), batch_remove()

필드타입기본값설명
socket_timeoutint30000소켓 유휴 타임아웃 (ms)
total_timeoutint1000전체 트랜잭션 타임아웃 (ms)
max_retriesint2최대 재시도 횟수
timeout_delayint0데드라인을 지난 요청을 타임아웃 처리하기 전 대기 시간 (ms).
concurrencyintBATCH_CONCURRENCY_PARALLEL노드별 분산 모드. BATCH_CONCURRENCY_SEQUENTIAL(노드 순차) 또는 BATCH_CONCURRENCY_PARALLEL(전체 병렬, 기본값). Batch Concurrency 상수 참조. 다른 값은 ValueError를 발생시킵니다.
filter_expressionAnyExpression 필터
policy: BatchPolicy = {"total_timeout": 10000}
batch = client.batch_read(keys, policy=policy)

QueryPolicy

쿼리 작업을 위한 정책입니다.

사용하는 메서드: Query.results(), Query.foreach()

필드타입기본값설명
socket_timeoutint30000소켓 유휴 타임아웃 (ms)
total_timeoutint0전체 트랜잭션 타임아웃 (0 = 제한 없음)
max_retriesint2최대 재시도 횟수
timeout_delayint0데드라인을 지난 요청을 타임아웃 처리하기 전 대기 시간 (ms).
max_recordsint0최대 반환 레코드 수 (0 = 전부)
records_per_secondint0속도 제한 (0 = 무제한)
filter_expressionAnyaerospike_py.exp로 빌드한 Expression 필터
policy: QueryPolicy = {"max_records": 100}
records = query.results(policy=policy)

ScanPolicy

스캔 작업을 위한 정책입니다. 공식 Aerospike Python C 클라이언트의 ScanPolicy를 미러링합니다.

aerospike-core 2.0 크레이트는 아직 별도의 ScanPolicy 구조체를 노출하지 않으므로, 현재 스캔 호출은 QueryPolicy 파서를 경유합니다. 향후 aerospike-core에 전용 ScanPolicy가 추가되면 사용자 측 타입 변경 없이 내부에서 새 파서로 전환됩니다. issue #316 참조.

사용하는 메서드: client.scan() 및 predicate 없는 client.query()

필드타입기본값설명
socket_timeoutint30000소켓 유휴 타임아웃 (ms)
total_timeoutint0전체 트랜잭션 타임아웃 (0 = 제한 없음)
max_retriesint2최대 재시도 횟수
timeout_delayint0데드라인을 지난 요청을 타임아웃 처리하기 전 대기 시간 (ms).
filter_expressionAnyaerospike_py.exp로 빌드한 Expression 필터
replicaintPOLICY_REPLICA_SEQUENCE레플리카 알고리즘
read_mode_apintPOLICY_READ_MODE_AP_ONEAP 읽기 일관성 수준
records_per_secondint0노드당 속도 제한 (0 = 무제한; 서버 4.7+)
max_recordsint0최대 반환 레코드 수 근사값 (0 = 전부; 서버 6.0+)
durable_deleteboolFalse백그라운드 스캔-쓰기에서 영구 삭제 사용 (Enterprise 3.10+)
ttlint0백그라운드 스캔-쓰기의 기본 TTL
partition_filterPartitionFilter(4096개 전부)스캔할 파티션 부분집합. aerospike_py.partition_filter_*() 헬퍼로 생성.

BatchUDFPolicy

batch_apply()를 위한 배치-레벨 UDF 정책입니다. 레코드 단위 오버라이드는 BatchUDFMeta에 둡니다. 전송-레벨 옵션(타임아웃, 재시도, concurrency 등)은 BatchPolicy에 위치하며, batch_apply()에 전달하는 동일한 정책 딕셔너리에 머지됩니다.

사용하는 메서드: batch_apply()

필드타입기본값설명
commit_levelintPOLICY_COMMIT_LEVEL_ALL커밋 수준 (POLICY_COMMIT_LEVEL_ALL / _MASTER)
ttlint0레코드 TTL (초). 0 = 네임스페이스 기본, -1 = 만료 안 함, -2 = 업데이트 안 함
keyintPOLICY_KEY_DIGEST키 전송 정책 (POLICY_KEY_DIGEST / POLICY_KEY_SEND)
durable_deleteboolFalseUDF가 레코드를 삭제할 때 영구 삭제 (Enterprise 3.10+)
filter_expressionAny각 레코드에 적용되는 Expression 필터. 필터에 걸린 레코드는 BatchRecord.result == FILTERED_OUT을 반환합니다.

BatchUDFMeta

batch_apply()의 레코드 단위 메타입니다. keys 인자에서 (key, meta) 튜플의 두 번째 요소로 전달합니다. BatchDeleteMeta와 동일한 단일 평면 dict 형태이며, UDF 호출 형태와 정책 필드를 동시에 오버라이드할 수 있습니다.

필드타입설명
modulestr이 레코드의 UDF 모듈명 오버라이드. 미지정 시 batch_apply()module 인자 사용.
functionstr이 레코드의 UDF 함수명 오버라이드.
argslist[Any]인자 리스트 오버라이드. []을 명시적으로 전달하면 기본 args를 비웁니다.
ttlint이 레코드의 TTL 오버라이드 (초; WriteMeta.ttl과 동일 시맨틱).
commit_levelint커밋 수준 오버라이드.
keyint키 전송 정책 오버라이드 (POLICY_KEY_DIGEST / POLICY_KEY_SEND).
durable_deletebool영구 삭제 오버라이드.
노트

filter_expressionBatchUDFMeta에서 받지 않습니다 — 배치-레벨 BatchUDFPolicy에서 설정하세요. (aerospike-core 2.0에서 레코드 단위 filter_expression은 와이어링되지 않으며, BatchDeleteMeta와 같은 형태입니다.)

# 모든 키에 동일한 UDF 적용
keys = [("test", "demo", f"u_{i}") for i in range(10)]
results = client.batch_apply(keys, "my_udf", "increment_counter", [1])

# 레코드별 오버라이드: 한 레코드만 다른 args/긴 TTL
results = client.batch_apply(
[
("test", "demo", "u_1"), # 기본 args 사용
(("test", "demo", "u_2"), {"args": [5], "ttl": 3600}),
],
"my_udf", "increment_counter", args=[1],
)

AdminPolicy

관리 작업을 위한 정책입니다.

사용하는 메서드: admin_create_user(), admin_drop_user(), admin_change_password(), admin_grant_roles(), admin_revoke_roles(), admin_query_user_info(), admin_query_users_info(), admin_create_role(), admin_drop_role(), admin_grant_privileges(), admin_revoke_privileges(), admin_query_role(), admin_query_roles(), admin_set_whitelist(), admin_set_quotas()

필드타입기본값설명
timeoutint1000관리 작업 타임아웃 (ms)
policy: AdminPolicy = {"timeout": 5000}
client.admin_create_user("user", "pass", ["read-write"], policy=policy)

WriteMeta

쓰기 작업의 메타데이터입니다.

사용하는 메서드: put(), remove(), touch(), append(), prepend(), increment(), remove_bin(), operate(), operate_ordered()meta 파라미터로 사용

필드타입설명
genint낙관적 잠금을 위한 예상 generation (POLICY_GEN_EQ와 함께 사용)
ttlint레코드 TTL (초 단위)
# TTL 설정
meta: WriteMeta = {"ttl": 300}
client.put(key, bins, meta=meta)

# 낙관적 잠금
record = client.get(key)
meta: WriteMeta = {"gen": record.meta.gen}
client.put(key, new_bins, meta=meta, policy={"gen": aerospike_py.POLICY_GEN_EQ})

Privilege

관리자 역할 관리를 위한 권한 정의입니다.

사용하는 메서드: admin_create_role(), admin_grant_privileges(), admin_revoke_privileges()

필드타입설명
codeint권한 코드 (PRIV_READ, PRIV_WRITE, PRIV_READ_WRITE 등)
nsstr네임스페이스 범위 (빈 문자열이면 글로벌)
setstr세트 범위 (빈 문자열이면 네임스페이스 전체)
privilege: Privilege = {
"code": aerospike_py.PRIV_READ_WRITE,
"ns": "test",
"set": "demo",
}
client.admin_create_role("custom_role", [privilege])

UserInfo

관리자 쿼리가 반환하는 사용자 정보입니다.

반환하는 메서드: admin_query_user_info(), admin_query_users_info()

필드타입설명
userstr사용자명
roleslist[str]할당된 역할 이름
conns_in_useint활성 연결 수

RoleInfo

관리자 쿼리가 반환하는 역할 정보입니다.

반환하는 메서드: admin_query_role(), admin_query_roles()

필드타입설명
namestr역할 이름
privilegeslist[Privilege]할당된 권한
allowlistlist[str]IP 허용 목록
read_quotaint읽기 쿼터
write_quotaint쓰기 쿼터