Ⅰ 資料庫有幾十萬條數據,求高手指點如何處理並發
如果有20萬條數據,5分鍾內處理完成,那麼每秒最少要處理600多條數據。你這個瓶頸在三個方面:
本地資料庫讀寫,你這個需要資料庫表不人導致死鎖的,這個可以通過堆硬體性能(IO和CPU主頻),資料庫做好對應的索引提升查詢速度,返回的結果先緩存到redis里,然後再寫回去,應該是可以解決的
提交速度,每秒提交600條,這個靠單線程是肯定解決不了的,這需要多任務多線程處理。。。最好的方式是第三方網站可以批量查詢
你以這么快的速度提交過去,第三方介面不一定能處理完成,可能有QPS限速的。這就不是你解決的了,需要第三方提升性能。
Ⅱ excel怎麼樣存10萬數據
excel表中,一列數據有10萬個數據,我要按順序將每5000個數據分成一組
分很好分的,你打算把分後的數據放哪兒啊?
excel表格如何打開10萬行的數據 如果有其他軟體也請推薦一下
使用資料庫程序打開,網上搜索哈,一大堆。
excel20多萬行數據,如何分成一萬一張的小表
這個如果要想批量處理,那麼寫代碼是首選
不然得人工自己一萬一萬的分表復制粘貼另存。
EXCEL表格只能容納6萬條數據,有什麼軟體可以容納10萬條以上的數據呢?
可以用高版本的,不過這6萬條是一個工作表,而一個EXCEL文檔可以放很多張工作表的,可以把相關數據放在其它工作表中。
excel數據太長1萬行怎麼分成10份,一份1000……如圖做示範,謝謝啦~
你要分10列還是10個工作表?
超過十萬條的表格怎樣用EXCEL打開
用EXCEL2007及其以上,打開,確切數字是:1048576行;16384列。
Excel是Microsoft Office system 中的電格程序。可以使用 Excel 創建工作簿(電子表格集合)並設置工作簿格式,以便分析數據和做出更明智的業務決策。特別是,可以使用 Excel 跟蹤數據,生成數據分析模型,編寫公式以對數據進行計算,以多種方式透視數據,並以各種具有專業外觀的圖表來顯示數據。
求助,十幾萬條的excel表數據用什麼配置能處理
CPU。inter 雙核2.6Ghz以上,內存4G或以上,硬碟80G或以上都可以勝任你所說的文件,不是什麼大困難。如果配置再低的話也可以,就是太卡啦。
excel表中,如何把B列10萬條數據,按每999條分一組,進行分組查詢。
如何快速填充公式1,填,可填充,如果前一列連續多行,則填充相同多行 方法2,先輸入要填充式,按下SHIFT CTRL 方向鍵下,再按下CTRL D 方法3,按下SHIFT CTRL 方向鍵下,再在編輯欄里輸入公式,再按下CTRL 回車 方法4,名稱框輸入需要填充的范圍 (比如 A1:A54000) 回車 公式編輯欄輸入要復制的公式後,同時按 CTRL 回車鍵輸入 方法5,選中要填充的格子,按CTRL C(復制第一個帶公式的單元格),然後滑鼠移到名稱框,直接輸入列區間,如B3:B10000,回車,之後按CTRL V(點中該位置--右鍵粘貼)。 2和3的方法可填充至65536行 4和5方法就是要輸入幾行就是幾行 你的要求合適用方法4
Ⅲ 緩存中有10萬條數據,如何提高效率
這個例子給你看下!希望對你有幫助!是關於hash_table的!
struct hashFun
{
size_t operator()(int nVal) const
{
char szVal[64] = {0};
_itoa(nVal, szVal, 10);
const char* psz = szVal;
unsigned long _hash = 0;
for (; *psz != 0; ++psz)
{
_hash *= 16777619;
_hash ^= (unsigned long) (unsigned short&)*psz;
}
return _hash;
}
};
struct tableNode
{
int nValue;
DWORD nKey;
int nCount; //這個元素的個數
tableNode* pNext;
};
struct BoxVec
{
int nCount; //這個桶下的元素的類型的個數,可能不同的數在同一個桶下
int nMaxNum; //這個桶下這個元素出現的次數
int nVal;
tableNode* pHead;
};
class CMyHasTable
{
public:
CMyHasTable(const int* pBoxSize, int nBoxCount, int nLevel);
~CMyHasTable();
private:
int m_nBoxCount; //桶增長級數個數
const int* m_pBoxSize; //桶級數的值
int m_nBox; //桶的大小
int m_nLow; //桶個數的最小值
int m_nHight; //桶個數的最大值
int m_nLevel; //當前桶級數的索引
BoxVec* m_pBoxs;
int m_nSize; //元素的個數
public:
void Insert(int nVale);
int FindMaxCount();
private:
inline DWORD GetBoxIndex(DWORD key) const
{
return key & (m_nBox - 1);
}
inline DWORD GetBoxIndex(DWORD key, int nNewBox) const
{
return key & (nNewBox - 1);
}
private:
tableNode* Find(tableNode node);
void IncreaseLevel();
void SwitchLevel(int nNewLevel);
void UpBoxMaxCount(int nIndex);
};
.cpp文件
CMyHasTable::CMyHasTable(const int* pBoxSize, int nBoxCount, int nLevel)
{
m_pBoxSize = pBoxSize;
m_nBoxCount = nBoxCount;
m_nLevel = nLevel;
m_nHight = m_nBox = m_pBoxSize[m_nLevel];
m_nLow = m_nLevel > 0 ? m_pBoxSize[m_nLevel - 1]/2 : 0;
m_pBoxs = new BoxVec[m_nBox];
memset(m_pBoxs, 0, sizeof(BoxVec) * m_nBox);
m_nSize = 0;
}
CMyHasTable::~CMyHasTable()
{
for (int i = 0; i < m_nBox; ++i)
{
tableNode* p = m_pBoxs[i].pHead;
while (p != NULL)
{
tableNode* q = p->pNext;
delete p;
p = q;
}
}
delete[] m_pBoxs;
}
void CMyHasTable::Insert(int nVale)
{
tableNode valNode;
valNode.nValue = nVale;
valNode.nKey = hashFun()(nVale);
valNode.pNext = NULL;
tableNode* pNode = Find(valNode);
if (pNode == NULL)
{
m_nSize ++;
tableNode* pNew = new tableNode;
*pNew = valNode;
pNew->nCount = 1;
DWORD dwBoxIndex = GetBoxIndex(valNode.nKey);
pNew->pNext = m_pBoxs[dwBoxIndex].pHead;
m_pBoxs[dwBoxIndex].pHead = pNew;
m_pBoxs[dwBoxIndex].nCount++;
m_pBoxs[dwBoxIndex].nMaxNum = 1;
m_pBoxs[dwBoxIndex].nVal = nVale;
if (m_nSize >= m_nHight)
IncreaseLevel();
}
else
{
pNode->nCount++;
DWORD dwBoxIndex = GetBoxIndex(pNode->nKey);
UpBoxMaxCount(dwBoxIndex);
}
}
int CMyHasTable::FindMaxCount()
{
int nMaxCount = m_pBoxs[0].nMaxNum;
int nIndex = 0;
for (int i = 1; i < m_nBox; i++)
{
if (nMaxCount < m_pBoxs[i].nMaxNum)
{
nMaxCount = m_pBoxs[i].nMaxNum;
nIndex = i;
}
}
return m_pBoxs[nIndex].nVal;
}
void CMyHasTable::UpBoxMaxCount(int nIndex)
{
tableNode* p = m_pBoxs[nIndex].pHead;
tableNode* q = p;
int nMax = p->nCount;
while(p->pNext)
{
if (nMax < p->nCount)
{
nMax = p->nCount;
q = p;
}
p = p->pNext;
}
m_pBoxs[nIndex].nMaxNum = nMax;
m_pBoxs[nIndex].nVal = q->nValue;
}
tableNode* CMyHasTable::Find(tableNode node)
{
DWORD short_key = GetBoxIndex(node.nKey);
tableNode* p = m_pBoxs[short_key].pHead;
while (p != NULL)
{
if (p->nKey == node.nKey)
{
if (p->nValue == node.nValue)
return p;
}
p = p->pNext;
}
return NULL;
}
void CMyHasTable::IncreaseLevel()
{
if (m_nLevel < m_nBoxCount - 1)
SwitchLevel(m_nLevel + 1);
else
m_nHight = 0x20000000;
}
void CMyHasTable::SwitchLevel(int nNewLevel)
{
m_nLevel = nNewLevel;
int nNewBox = m_pBoxSize[m_nLevel];
BoxVec* pNewBoxs = new BoxVec[nNewBox];
memset(pNewBoxs, 0, sizeof(BoxVec) * nNewBox);
for (int i = 0; i < m_nBox; ++i)
{
tableNode* p = m_pBoxs[i].pHead;
tableNode* q = NULL;;
int nCout = m_pBoxs[i].nCount;
int nMax = m_pBoxs[i].nMaxNum;
while (p != NULL)
{
q = p->pNext;
DWORD sht_key = GetBoxIndex(p->nKey, nNewBox);
p->pNext = pNewBoxs[sht_key].pHead;
pNewBoxs[sht_key].pHead = p;
p = q;
pNewBoxs[sht_key].nCount = nCout;
pNewBoxs[sht_key].nMaxNum = nMax;
}
}
m_nHight = m_nBox = m_pBoxSize[m_nLevel];
m_nLow = m_nLevel > 0 ? m_pBoxSize[m_nLevel - 1]/2 : 0;
delete m_pBoxs;
m_pBoxs = pNewBoxs;
}
Ⅳ 2:在資料庫中如何處理幾十萬條並發數據
只要不指定主鍵,並發的增,是沒有問題的. 並發訪問的話,資料庫是有默認的並發訪問處理級別的. 另外可以使用悲觀鎖,樂觀鎖來實現數據並發訪問的問題. 幾十萬條的數據並發訪問會在國家級,門戶級別的伺服器上出現.其他的並發數據.則不多見,除非出現數據攻擊. 不過考慮現在的伺服器硬體級別和數據處理能力,這種情況,很少會使用這種數據攻擊.
麻煩採納,謝謝!