유저들에게는 현재 상태를 보여줘야 하는데
db select query를 날리는 순간 누군가 그 db에 insert 또는 update를 했을경우
select query를 그대로 유저에게 이게 현재 상태라고 보여줘야하는 문제였음
유저들에게는 현재 상태를 보여줘야 하는데
db select query를 날리는 순간 누군가 그 db에 insert 또는 update를 했을경우
select query를 그대로 유저에게 이게 현재 상태라고 보여줘야하는 문제였음
그건 DB로 처리하는 문제가 아닐텐데?
db로 처리 안하고 그럼 select 할때 insert update 한 이벤트를 따로 처리해서 유저에게 보여줘야하나? 만약에 그러면 insert update 이벤트가 빈번히 일어나는 경우에는?
insert update 하고 다시 select 해서 보여주려 하니까 대가리가 빠개지는거임 지금 말하는건 데이터의 정합성이 아니라 실시간성 아님? 그럼 굳이 db에 넣었다 빼야함?
잘 생각 해보셈 나는 이 문제 해결 했으니까
어케 해결한거임 혹시 중간에 redis같은 임시 저장 장치를 사용한거임? 이거 사용해도 문제가 생기던데
이벤트로 조져야지, 정보는 DB에게서 나오는게 아니라 유저나 기타 정보를 기입하는 주체로부터 나오는거임 그리고 그게 이벤트가 되어야지 DB가 갱신되는지 모니터링 하지말고, 모니터링하려면 언제 바뀌는지 모르기 때문에 계속 타이머 써가면서 바꼈는지 안바꼈는지 확인해야하잖아? 그 자체부터가 리소스 낭비라고
이벤트로 조질정도면 ㅜㅜ 나도 그러고 싶지 못하니 문제지 그래서 db를 바꾸려고 mysql에서 postgres로
님 지금 DB 할때가 아님, 네트워크부터 공부하셈 정 어렵게 느껴진다면 TCP/IP HTTP 이거 두개만 딱 공부해보셈
당장 구현이 중요하고 원리는 몰라도 된다 싶으면 그냥 다 때려 치우고 웹소켓 라이브러리 받아서 갖다 박으셈 그거로 이벤트 푸쉬하면 얼추 문제 해결 가능하긴함
저 websocket, mqtt, 통신은 하고 있어요. 실시간으로 들어오는 데이터 처리에 동시성 문제가 생겨서 그런거에요 ㅜㅜ
비동기 안조졌음??
websocket, mqtt는 실시간이에요. 바로바로 처리해야되서 중간에 redis에 넣고 꺼내서 db에 넣는데 mysql문제인지 동시성 에러가 생겨서 postgres로 바꿔서 해보려구요.
이벤트 처리는 db에 넣기전에 수행하지만 db에 기록이 안되니 문제인거죠 ㅜㅜ
postgres가 정답이네요. 사용해보니 장난 아니네요. 실시간처리에는 탁월하네요. 이벤트 -> 이벤트 처리 -> redis push -> redis pop -> postgres 저장 select시에 동시성 문제없이 읽어옴.
?? 웹소켓이나 MQTT나 조인트는 걸어놓아도 이벤트 발생시에 전송하는건 비동기로 처리해도 동시성 보장 되는데??... insert 박으면서 구독자에게 바로 이벤트 브로드케스팅처럼 때려버리면 되는데 db 성능이 문제가 아니라니깐...
너 지금 연산을 쿼리로 하고있구나? 그래서 무조건 db에 한번 넣었다 빼서 가공해야하는거구나.
내말 맞지??
테이블 나누셈
select table과 insert, update table을 나누라는거임? 헐 ㅜㅜ 일이 더 많아지는거 아님?
로그성 테이블 만들고 거기서 추리는 로직을 따로 구하던지
로그는 항상 기록하기 때문에 문제 원인이 뭔지를 파악하는거죠. 별로 파일로 기록하지만요. 근데 이게 문제는 아닌것 같습니다.
트랜잭션 같은거 걸면안됨? 순서가 동시에 들어온건가
순서는 동시가 아니지만 select순간에 해당 row가 변경되거나 새로운 insert가 생겼을때 그걸 반영하는게 핵심이죠.
잘은 모르겠는데 2단계 로킹같은거로 하면안됨? S lock 걸고 x lock 걸어서 삽입후 순서대로 언락
그건 db에서 처리하는거라 알고 있어서 저는 그 부분까지는 생각을 못했습니다. 그걸 제대로하는 제품들이라 공개한것이라 생각하고 있거던요. 그것도 구현이 안되어 있으면 ㅏ무리 공개 소프트웨어라도 아무도 사용 않하겠죠
흠 그렇군...