Ask Your Question
0

ORM Map 사용시 문의 드립니다.

asked 2019-03-21 17:19:39 +0900

simpler gravatar image

updated 2019-03-21 17:20:40 +0900

ORM 관련 문의드립니다. 캐릭터의 인벤토리 정보를 Map을 이용해서 구현을 하였는데요. 이유는 아이템 id가 중복되지 않기 위해서고요. 삽입, 삭제는 이상 없으나.. 내 아이템의 정보를 클라이언트에게 보내기 위해서 Map을 순환을 해야 하는데요. Map: MapRef<keytype, valuetype="">를 순환 가능한지 문의 드립니다. 만약 map에 있는 모든 key를 반환해서 GetAt함수를 통해서 읽는다면 부하가 어느정도 일까요? 해당 map 오브젝트가 orm cache에 저장하고 있어도 Keys() 함수 사용시 큰 부하가 발생하나요?

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2019-03-25 17:37:09 +0900

Seunghyun gravatar image

안녕하세요. 아이펀팩토리입니다.

Keys() 를 이용하여 순회 하시면 됩니다. Map 의 Value 가 Object 이고 Foreign 이라면, 미리 모두 Fetch 하신 후 순회하셔야 성능에 문제가 생기지 않습니다. (루프를 돌며 하나씩 Fetch 하는 경우 성능에 매우 안 좋습니다.)

Foreign 일 경우 부모 오브젝트의 Fetch{Map Attribute 이름}() 함수를 이용하여 한번에 불러올 수 있습니다.

감사합니다.

edit flag offensive delete link more

Comments

현재 Map 의 Value 가 Object 이고 Foreign 입니다. key() 를 사용하기위해선 부모 오브젝트의 Fetch{Map Attribute 이름}() 함수를 이용해 MapRef<int64_t, ptr<object=""> > 형태로 받아오는데요. 루프를 돌며 하나씩 fetch하는 경우는 어떤 경우인가요?

simpler gravatar imagesimpler ( 2019-03-26 10:14:33 +0900 )edit

for 문 안에서 Map을 순회하면서 각 인덱스에 저장된 오브젝트 ID 로 Fetch() 를 호출하는 경우입니다. 이 경우 각 인덱스를 순회할 때마다 롤백이 발생할 수 있으므로 ID 를 모아 한 번에 Fetch() 하신 후 사용하는 것이 좋습니다.

이런 형태로 가져온 이후부터는 for 문 안에서 Map을 순회해도 이미 앞에서 ID 목록으로 Fetch()를 했기 때문에 성능 문제가 발생하지 않습니다.

gigone.lee gravatar imagegigone.lee ( 2019-03-26 10:21:08 +0900 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-03-21 17:19:39 +0900

Seen: 54 times

Last updated: Mar 25