요청데이터를 묶은 key 값을 받고(1차), 그 key값과 요청 데이터의 hash값을 보내면 성공 응답이 돌아온다(2차).
# 요청 데이터
{"name":"user", "transfer_amount":100}
# 응답 데이터: key 값
{"transfer_identifier": 11}
# 요청 데이터
{"signature":"46a84b46fb4f6gad5f6dg", "transfer_identifier": 11}
# 응답 데이터
{"status": true}
hash_table = list([0 for _ in range(5)]) #해시 테이블 크기는 0~4
#hash() 내장함수 사용
def get_key(data): #데이터를 hash값으로
return hash(data)
def hash_function(key): #hash값 리턴
return key % 5
def save_data(data, value): #key값을 받으면 0~4의 인덱스값으로 변환해줌, 그 인덱스에 value를 저장
hash_address = hash_function(get_key(data))
hash_table[hash_address] = value
return hash_address # hash 주소(key값) 반환
def read_data(hash_address):
return hash_table[hash_address]
>>> save_data('user', '1000')
2
>>> save_data('user2', '01055559999')
4
>>> save_data('user3', '11000')
2
hash_table = list([None for i in range(5)]) #해시 테이블 크기는 0~4
#hash() 내장함수 사용
def get_key(data): #데이터를 hash값으로
return hash(data)
def hash_function(key): #hash값 리턴
return key % 5
def save_data_hash_table(data, value):
index_key = get_key(data)
hash_address = hash_function(index_key)
# 같은 hash_address가 있는 경우
if hash_table[hash_address] != None:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
hash_table[hash_address][index][1] == value
# hash_table[hash_address] 출력 예: [[7886761754358330341, value]]
hash_table[hash_address].append([index_key, value])
return hash_address
else:
hash_table[hash_address] = [[index_key, value]]
return hash_address
def get_data_hash_table(data, hash_address):
index_key = get_key(data)
if hash_address == hash_function(index_key):
if hash_table[hash_address] != None:
for index in range(len(hash_table[hash_address])):
if hash_table[hash_address][index][0] == index_key:
return hash_table[hash_address][index][1]
else:
return "invalid data"
>>> save_data_hash_table('user', 1000)
2
>>> save_data_hash_table('user1', 10050)
2
>>> get_data_hash_table('user', 2)
1000
>>> get_data_hash_table('user2', 2)
'invalid data'
>>> get_data_hash_table('user2', 4)
15000
[참고 사이트]