一個大資料量問題的探索(關於分區表的應用)

來源:互聯網
上載者:User

最近遇到一個資料量大引起的問題, 目前資料量大約8M條資料。以後還將以每天近萬的資料增加。 因此考慮MsSqlServer的分區表特性。
原先的表設計相當於
表名為UserEvent
Id(bigint),UserId(nvarchar(250)), EventId(nvarchar(250)), column1, column2, column3.

此表相當於一張系統所有業務的索引表, 記錄了某使用者在此系統中所有的業務行為。
應用場合:
每當該使用者在該系統中發生一筆業務, 將在該表中記錄一筆資料。
查詢頁面: 使用者將通過UserId或EventId, 但必須需要兩者中的一個資料進行資料查詢。

由於mssqlserver只支援一個列的分區表的策略, 但是目前的應用情境則必須需要有兩列的資訊(UserId, EventId), 所有從資訊量上的考慮,
分區列也必須包含此兩列的資訊, 因此考慮增加一列:
Id(bigint),SequenceId(int), UserId(nvarchar(250)), EventId(nvarchar(250)), column1, column2, column3
但是問題隨之而來, 使用者可能只考慮輸入UserId, 或者EventId。 這樣的話導致定位分區表的資訊量不夠, 不能有效利用分區表的特點。
問題總歸沒有答案多呵, 考慮對SequenceId編碼。
暫訂SequenceId為0~99的數字, 十位上的0~9表示EventId的一個編碼, 個位上的0~9表示UserId的一個編碼。這個編碼可以通過HashCode得到後,
再去取得其的個位。 (至於這個編碼, 要看應用場合的, 不然會達不到很好的散列效果的)

這樣的話, 使用者若只輸入UserId(得到的編碼為6), 則我們可以在查詢條件中, 加入條件(sequenceId in (6,16,26, 36,46, 56,66,76,86,96))

有什麼好的建議, 不吝賜教。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.