Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
810
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 Ignite 2024 最新情報!Microsoft 365 Agents SDK 概要 / Microsoft Ignite 2024 latest news Microsoft 365 Agents SDK overview
karamem0
0
300
徹底解説!Microsoft 365 Copilot の拡張機能 / Complete guide to Microsoft 365 Copilot extensions
karamem0
1
3.3k
Microsoft Search の Graph コネクタ ハンズオン / Handson for Graph Connector of Microsoft Search
karamem0
0
72
いまだから「検索」を語ろう! SharePoint FAST Search から Microsoft Search セマンティックインデックスまで / Let's talk about search now
karamem0
3
1.4k
徹底解説!Power Platform 導入の成功事例から見る DX 推進のコツ / Tips for DX promotion from Power Platform case studies
karamem0
0
5.1k
どうする Power Pages?Web 開発者からみる Power Pages / How to deal with Power Pages
karamem0
0
1.2k
Fluent UI を理解する / Understanding Fluent UI
karamem0
0
750
Microsoft Teams の 会議アプリ開発のはじめかた / How to start Microsoft Teams app development
karamem0
0
3.6k
Web API 開発を加速しよう - Avanade Beef のご紹介 / Accelerate your web API - development introducing Avanade Beef
karamem0
0
2.7k
Other Decks in Programming
See All in Programming
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
170
PEPCは何を変えようとしていたのか
ken7253
2
190
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
150
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
980
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
150
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1.1k
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
54
19k
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
260
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.6k
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
250
CloudNativePGを布教したい
nnaka2992
0
110
Better Code Design in PHP
afilina
0
160
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
We Have a Design System, Now What?
morganepeng
51
7.4k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Producing Creativity
orderedlist
PRO
344
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Embracing the Ebb and Flow
colly
84
4.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
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