Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SharePoint リスト Deep Dive / Deep-dive on SharePo...
Search
Takashi Shinohara
November 19, 2016
Programming
0
860
SharePoint リスト Deep Dive / Deep-dive on SharePoint list
(2017/11/30) ロック エスカレーションに関する記載について修正しました。
Takashi Shinohara
November 19, 2016
Tweet
Share
More Decks by Takashi Shinohara
See All by Takashi Shinohara
Microsoft 365 の認証と承認を理解する / Understanding Microsoft 365 Authentication and Authorization
karamem0
0
140
Power Automate のパフォーマンス改善レシピ / Power Automate Performance Improvement Recipes
karamem0
0
400
どっちの API SHOW?SharePoint 開発における SharePoint REST API Microsoft Graph API の違い / Which API show? Differences between Microsoft Graph API and SharePoint REST API
karamem0
0
1.6k
Microsoft Ignite 2024 最新情報!Microsoft 365 Agents SDK 概要 / Microsoft Ignite 2024 latest news Microsoft 365 Agents SDK overview
karamem0
0
530
徹底解説!Microsoft 365 Copilot の拡張機能 / Complete guide to Microsoft 365 Copilot extensions
karamem0
1
4.3k
Microsoft Search の Graph コネクタ ハンズオン / Handson for Graph Connector of Microsoft Search
karamem0
0
200
いまだから「検索」を語ろう! SharePoint FAST Search から Microsoft Search セマンティックインデックスまで / Let's talk about search now
karamem0
4
1.7k
徹底解説!Power Platform 導入の成功事例から見る DX 推進のコツ / Tips for DX promotion from Power Platform case studies
karamem0
0
5.4k
どうする Power Pages?Web 開発者からみる Power Pages / How to deal with Power Pages
karamem0
0
1.4k
Other Decks in Programming
See All in Programming
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
関数実行の裏側では何が起きているのか?
minop1205
1
710
FluorTracer / RayTracingCamp11
kugimasa
0
240
Integrating WordPress and Symfony
alexandresalome
0
160
Python札幌 LT資料
t3tra
3
620
sbt 2
xuwei_k
0
300
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
110
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
120
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.3k
AIコーディングエージェント(NotebookLM)
kondai24
0
210
Cell-Based Architecture
larchanjo
0
130
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
47k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
300
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
340
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
61
Faster Mobile Websites
deanohume
310
31k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Side Projects
sachag
455
43k
4 Signs Your Business is Dying
shpigford
186
22k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
310
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Transcript
SharePoint リスト Deep Dive 篠原敬志 (@karamem0)
自己紹介 • 篠原敬志 (Takashi Shinohara) • Twitter: @karamem0 • Blog:
からめもぶろぐ。(http://blog.karamem0.jp) 2
はじめに • SharePoint は自由にカスタマイズ可能であることが大きなメリットです。 SharePoint を基盤としたシステム開発が数多く行われています。 • しかし SharePoint には製品独自のクセがあるため、通常の
ASP.NET 開発と同 じ手法だと、動かないシステムを構築してしまうことになります。 • 中でも特に重要なリストとの上手な付き合い方を紹介します。 3
スコープ 4 論理層 ファーム Web アプリケーション サイト コレクション サイト リスト/ライブラリ
物理層 サーバー IIS コンテンツ データベース テーブル オブジェクト SPFarm SPWebApplication SPSite SPWeb SPList
リスト≠データベース 5
リストを使うメリット • データ型 • フォーム / ビュー • アクセス許可 •
ワークフロー / イベントレシーバー 6
リストの実体 • リスト定義は [dbo].[AllLists] テーブル • Schema.xml の内容も圧縮バイナリ データとして格納されている •
リスト データは [dbo].[AllUserData] テーブル • 汎用的に入る設計 • bit1~bit1000、datetime1~datetime550、float1~float550、 int1~int750、ntext1~ntext262、nvarchar1~nvarchar262 • スパース列なので tp_ColumnSet を参照すればデータが入っている列だけを XML 形式で取得可能 7
リスト データの取得プロセス (ざっくり) 8 AllLists テーブルからリスト スキーマを取得 AllUserData テーブルからリスト データを取得
アクセス許可にしたがってフィルター リスト スキーマとリスト データをマッピング
リスト データの取得は時間がかかる 9
リスト データの取得のベスト プラクティス • リストにインデックスを付ける • 実際のプロジェクトでは 2 割程度の改善実績 •
CAML を使用する • SPList.Items は全部のデータを見に行ってしまうので CAML を使って取得する 内容を最低限にする • SPListItemCollectionPosition を使ってページングする • CAML よりは LINQ to SharePoint のほうがいいかも • リストへの直接アクセスをやめる • バッチやイベント レシーバーでリスト データをデータベースにコピー • データベース?そこに SQL Server があるじゃろ( ^ω^) 10
5000 件問題 • 5000 件を超えるリストに対してさまざまな制約がかかる • 根本的には SQL Server のロックのエスカレーションが原因
• [dbo].[AllUserData] には 1 以上のサイト コレクションのリスト データが含まれる ので表ロックされるととんでもないことに • 実際はロック エスカレーションが発生する前に WebApplication のしきい値でブ ロックされる 11
ただし SharePoint 2010 まで SharePoint 2013 ではロック エスカレーションは無効化されている 12
5000 件問題のベスト プラクティス • リストを細かい単位で分割する • 年度ごと、組織ごと、etc... • サイトごとテンプレート化しておけば展開も簡単 •
コンテンツ データベースの容量も気にする場合はサイト コレクションを分割する • コンテンツ クエリ検索を使用する • リストが分割されていてもクエリは 1 つ • リアルタイムを要求される検索には不向き • 事前に管理プロパティを登録しておく必要がある • どうしてもリストを分割できない場合はしきい値を変える • ただし SharePoint Online ではできない 13
リストのリレーション • SharePoint の参照列は他のリストにリレーションを持つことが可能 • ただし データベースのリレーションと同じと思っていると死にます (※死にました) 14
リストのリレーションの制約 • 参照は片方向のみ、逆方向は参照できない • 参照先のリストで使える列は 1 つのみ • 1 つのリストに設定できる参照列は
12 まで (変更可) • カスケード (参照整合性) はできる 15
リストのリレーションのベスト プラクティス • リストは正規化しない • リストを分割すると検索にも影響あり • ただしあまり列を作りすぎると SQL Server
で複数行が作成されパフォーマンス が悪くなるので注意 • リレーションの代わりに選択肢列や用語セットを使用する 16
まとめ • リスト≠データベース • リストはテーブルと非常によく似ているが、SharePoint 特有の制限があるため、慎 重に設計しないと面倒なことに • メリットもあるのでご利用は計画的に 17
参考リンク • 大きなリストを設計し、リストのパフォーマンスを最大限に高める (SharePoint Server 2010) https://technet.microsoft.com/ja-jp/library/cc262813.aspx • ソフトウェアの境界と制限 (SharePoint
2013) https://technet.microsoft.com/ja-jp/library/cc262787.aspx • ロックのエスカレーション (データベース エンジン) https://technet.microsoft.com/ja-jp/library/ms184286.aspx 18
参考リンク • SharePoint と SQL ブロッキングの話 https://blogs.technet.microsoft.com/sharepoint_support/2012/07/02/ sharepoint-sql-part1/ https://blogs.technet.microsoft.com/sharepoint_support/2012/07/04/ sharepoint-sql-part2/
https://blogs.technet.microsoft.com/sharepoint_support/2012/07/11/ sharepoint-sql-part3/ • リスト ビューのしきい値に関する FAQ https://blogs.technet.microsoft.com/sharepoint_support/2015/04/14/ faq/ 19