게임 서버 의 파일 데이터베이스 와 my sql 데이터 베 이 스 를 기반 으로 한 db 서버 디자인

디자인 상:
(1)파일 데이터 베 이 스 는 게임 논리 업무 요청 을 처리 하 는 데 사 용 됩 니 다.
(2)my sql 데이터 베 이 스 는 운영 배경 조회 요청 을 처리 하 는 데 사 용 됩 니 다.
(3)백업 업 무 는 정시 에 파일 데이터베이스 파일 을 백업 하 는 데 사용 된다.
전체 설계도 http://blog.csdn.net/chenjiayi_yun/article/details/11913207
파일 데이터베이스 업무 디자인 보기 http://blog.csdn.net/chenjiayi_yun/article/details/17880275
본문 목록:
1.캐릭터 데이터 업데이트 요청
2,mysql 업무 라인 순환 처리 업데이트 요청 3,파일 데이터베이스 업무 라인 순환 처리 업데이트 요청
4.백업 업무 스 레 드 순환 처리 백업 업무
본문 내용:
1.캐릭터 데이터 업데이트 요청
캐릭터 데이터 요청 저장,비 즈 니스 스 레 드 대기 열 에 제출
캐릭터 설명 데 이 터 를 저장 하고 파일 데이터베이스 캐릭터 설명 데이터 업데이트 목록 과 my sql 캐릭터 설명 데이터 업데이트 목록 에 제출 합 니 다.
캐릭터 의 구체 적 인 데 이 터 를 저장 하고 파일 데이터베이스 캐릭터 데이터 업데이트 목록 과 my sql 캐릭터 데이터 업데이트 목록 에 제출 합 니 다.
VOID CDBDataClient::CatchSaveCharData(CDataPacketReader &inPacket)
{
INT64 nCharId;
DWORD dwDataSize;

inPacket >> nCharId;
inPacket >> dwDataSize;

CGameDataBuffer *pBuffer = m_pDataServer->AllocGameDataBuffer();
pBuffer->AddRef();
pBuffer->SetData(nCharId, inPacket.getOffsetPtr(), dwDataSize);

CharDesc *pCharDesc = m_pLocalDB->GetCharDesc(nCharId);
if (pCharDesc)
{
//           
common::DBType::PlayerBasicData *pBaseData =(common::DBType::PlayerBasicData *)\
pBuffer->getPositionPtr(sizeof(common::DBType::DataSectionHeader));

//            
pCharDesc->wLevel = pBaseData->wLevel;
pCharDesc->btGender = pBaseData->btGender;
pCharDesc->nUpdateTime = CMiniDateTime::now();

m_pLocalDB->PostUpdateCharDesc(pCharDesc);
m_pSQLDB->PostUpdateCharDesc(pCharDesc);
}
else logError( _T("                      (%lld)"), nCharId);

m_pLocalDB->PostUpdateCharData(pBuffer);
m_pSQLDB->PostUpdateCharData(pBuffer);

pBuffer->Release();

CDataPacket &pack = AllocProtoPacket(DBType::dsSaveCharData);
pack << (int)0;//SUCCESS
pack << nCharId;
FlushProtoPacket(pack);
}

2.my sql 비 즈 니스 스 레 드 순환 처리 업데이트 요청
my sql 스 레 드 처리 순환,처리 데이터 기록 my sql 요청
VOID CSQLDB::OnRountine()
{
TICKCOUNT dwStartTick;
while (!terminated())
{
if (!m_boStarted)
{
moon::OS::osSleep(16);
continue;
}
//  SQL   
if (!ConnectSQLDB())
{
moon::OS::osSleep(16);
continue;
}
dwStartTick = _getTickCount();
//          
m_NewCharList.flush();
if (m_NewCharList.count() > 0)
{
ProcessAddNewChars(4);
}
m_UpdateCharDescList.flush();
if (m_UpdateCharDescList.count() > 0)
{
ProcessUpdateCharDescs(4);
}
//          
m_CharDataUpdateList.flush();
if (m_CharDataUpdateList.count() > 0)
{
ProcessCharDataUpdate(4);
}
//          
m_GuildDataUpdateList.flush();
if (m_GuildDataUpdateList.count() > 0)
{
ProcessGuildDataUpdate(4);
}
moon::OS::osSleep(4);
}
}

3.파일 데이터베이스 업무 스 레 드 순환 처리 업데이트 요청
VOID CLocalDB::OnRountine()
{
	TICKCOUNT dwStartTick;
	TICKCOUNT dwBackupTick = 0;
	while (!terminated())
	{
		if (!m_boOpened)
		{
			osSleep(16);
			continue;
		}

		dwStartTick = _getTickCount();
		if ((m_nBackupInterval) && (0 == dwBackupTick))
			dwBackupTick = _getTickCount();
		//          
		m_CharDescUpdateList.flush();
		if (m_CharDescUpdateList.count() > 0)
		{
			ProcessCharDescUpdate(4);
		}
		//          
		m_CharDataUpdateList.flush();
		if (m_CharDataUpdateList.count() > 0)
		{
			ProcessCharDataUpdate(4);
		}
		//          
		m_GuildDataUpdateList.flush();
		if (m_GuildDataUpdateList.count() > 0)
		{
			ProcessGuildDataUpdate(4);
		}

		if ((m_nBackupInterval) && ((INT)(_getTickCount() - dwBackupTick) >= m_nBackupInterval))//      (  48  )
		{
			BackupFDBFiles();
			m_ZipBackup.StartZipBackup();//                  
			dwBackupTick = 0;
		}

		osSleep(4);
	}
}

4.백업 업무 스 레 드 순환 처리 백업 업무
백업 업무 스 레 드 가 파일 데이터 베 이 스 를 처리 하 는 파일 의 백업 업 무 를 막 습 니 다.
VOID CZipBackup::OnRountine()
{
#ifdef WINDOWS
	m_hZipBackupEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
#else
	pthread_cond_init(&m_hZipBackupEvent, NULL);
#endif
	while (!terminated())
	{
#ifdef WINDOWS
		::WaitForSingleObject(m_hZipBackupEvent, INFINITE);
#else
		pthread_mutex_lock( &m_tx );
		pthread_cond_wait( &m_hZipBackupEvent , &m_tx );
		pthread_mutex_unlock( &m_tx );
#endif
		if (terminated())
			break;
		DoZipBackup();
		CleanBackupFiles();
		osSleep(10);
	}
#ifdef WINDOWS
	::CloseHandle(m_hZipBackupEvent);
	m_hZipBackupEvent = NULL;
#else
	pthread_cond_destroy(&m_hZipBackupEvent);
#endif
}

좋은 웹페이지 즐겨찾기