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

Read Operations

Keys

모든 record는 key 튜플로 식별됩니다: (namespace, set, primary_key).

key = ("test", "demo", "user1")      # string PK
key = ("test", "demo", 12345) # integer PK
key = ("test", "demo", b"\x01\x02") # bytes PK

Read (Get)

from aerospike_py import Record

record: Record = client.get(("test", "demo", "user1"))
# record.key → AerospikeKey | None
# record.meta → RecordMetadata | None (meta.gen, meta.ttl)
# record.bins → dict[str, Any] | None

# 튜플 언패킹도 가능 (하위 호환)
key, meta, bins = client.get(("test", "demo", "user1"))
# meta.gen == 1, meta.ttl == 2591998
# bins = {"name": "Alice", "age": 30}

Read Specific Bins (Select)

_, meta, bins = client.select(key, ["name"])
# bins = {"name": "Alice"}

Check Existence

from aerospike_py import ExistsResult

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

# 튜플 언패킹도 가능
_, meta = client.exists(key)

Batch Read

단일 네트워크 호출로 여러 record를 읽습니다. BatchRecords 객체를 반환합니다.

  • bins=None - 모든 bin 읽기
  • bins=["a", "b"] - 특정 bin만 읽기
  • bins=[] - 존재 여부만 확인
keys = [("test", "demo", f"user_{i}") for i in range(10)]

# 모든 bin 읽기
batch = client.batch_read(keys)
for br in batch.batch_records:
if br.record:
key, meta, bins = br.record
print(f"{key}{bins}")

# 특정 bin만 읽기
batch = client.batch_read(keys, bins=["name", "age"])

# 존재 여부만 확인
batch = client.batch_read(keys, bins=[])
for br in batch.batch_records:
print(f"{br.key}: exists={br.record is not None}")

Best Practices

  • 배치 크기: 배치 크기를 적절하게 유지하세요 (100-5000 keys). 매우 큰 배치는 타임아웃이 발생할 수 있습니다.
  • 타임아웃: 대규모 배치 작업에 대해 policy를 통해 적절한 타임아웃을 설정하세요.
  • 오류 처리: 배치 내의 개별 record는 독립적으로 실패할 수 있습니다. 각 결과의 bin이 None인지 확인하세요.