SQL Server 2012– תכונות חדשות – FILETABLE - ilDBA Portal

SQL Server 2012– תכונות חדשות – FILETABLE

18/01/2011 | פורסם על ידי

FileTable ב-SQL Server 2012– קבצים, קבצים בקצות אצבעותיך….

הקדמה

SQL 2008 הציג לראשונה את היכולת לכתוב קבצים כחלק מבסיס הנתונים (FileStraem). יכולת זו מאפשרת כמה דברים חשובים ושימושיים, ביניהם איחסון BLOB כחלק מבסיס הנתונים ושמירה על עיקביות ושלמות בסיס הנתונים בסינכרון עם קבצים אלה.

כלומר בניגוד לפתרונות של שמירת מצביעים לקבצים ,ושמירת הקבצים בנפרד בתיקיות של מערכת ההפעלה, הקבצים הנרשמים לסיפריה שומרים על טרנזקטיביות מלאה כמו כל ישות רלציונית אחרת ,וגיבויים ושיחזורים של בסיס הנתונים יכילו את המידע בקבצים אלה נכון לנקודת הזמן הרצויה.

הוספת תכונה זו היא חלק מאסטרטגיה ברורה של מיקרוסופט להפוך את SQL Server לבסיס נתונים שאינו מכיל רק נתונים במסגרת המודל הרלציוני בלבד (דוגמא נפלאה לכך היא תכונה חדשה שתתממש בגרסת 2012- Columnbased Index – מימוש מבנה נתונים אנכי בתוך בסיס הנתונים הרלציוני. סיפרנו על כך כאן: לינק).

לפי הסטטיסטיקות המקובלות, רוב המידע בעולם (70% עד 80%) נישמר בקבצים.
תכונת ה-FILESTREAM ב-  SQL 2008 מכילה כמה מיגבלות שמנעו ממנה להפוך את המידע הזה לזמין דרך בסיס הנתונים. קודם כל השימוש ביכולות FILESTREAM הצריך מימוש ספציפי ב- WIN32 API,דבר מגביל כשלעצמו. בנוסף לא היה כל מימשק T-SQL ל-FILESTREAM ,מה שניוון את השימוש ב-FILESTREAM והגבילו בעיקר לאיחסון BLOB. הגישה אליו הייתה באמצעות אפליקציות CLIENT שניכתבו במיוחד לשימוש בתכונה זו.

אז אם היום שואלים אותנו המשתמשים והלקוחות מה היינו רוצים להוסיף לשילוב קבצים ה-SQL Server, היינו בוודאי מציינים מספר דברים:

  1. למה שלא נוכל פשוט להגדיר במערכת ההפעלה תיקיה שתהיה גם טבלה ,ותהיה כמובן חלק מבסיס נתונים.
  2. ואם כבר טבלה כתיקיה אז למה שלא נוכל להשתמש בכל אפליקציה שמממשת WIN32 וניגשת לתיקיה ,כמו למשל ROBOCOPY,XCOPY וכולי?
  3. ונניח שיש לנו כ-100 מסמכי Word בטבלה/תיקיה ,אז למה שלא נממש על הטבלה הזו FULLTEXT SEARCH ונחפש קבצים המכילים מילות מפתח שמעניינות אותנו דרך T-SQL?

FILETABLE ב-DENALI

ביקשנו … וקיבלנו ,ב-SQL Server 2012  מממשת מיקרוסופט בדיוק את האמור לעיל דרך תכונה שנקראית FileTable – טבלה שהיא תיקיה.

FileTable הם טבלאות מוגדרות משתמש מיוחדות עם סכמה קבועה מראש ששומרת מידע במבנה נתונים מסוג FILESTRAEM. הטבלאות שומרות מידע על קבצים, תיקיות, היררכיה של תיקיות, ותכונות של תיקיות או קבצים. כל שורה בטבלה מסוג זה ממופה לקובץ אחד או תיקיה אחת.

ל- FileTable ניתן לגשת ע"י אפליקציות מבוססות Win32 ע"י SHARE רגיל של WINDOWS.
כאשר יישום כלשהוא יוצר/משנה/מוחק סיפריה או קובץ השינויים משתקפים באופן אוטומטי ב-FILETABLE בתוך SQL SERVER.
FileTable תומך גם בפקודות T-SQL רגילות – כולל קריאה, עידכון ומחיקה – כאילו היה טבלה יחסית רגילה.
בנוסף נתמכים גם גיבוי, רפליקציה, וHADR של SQL Server 2012 (שעליה אכתוב באחד המאמרים הבאים).

הדבר החשוב ביותר שיש לזכור לגבי FileTable הוא כאשר ניגשים לתיקיה דרך פעולות Win32 (XCOPY למשל) הגישה איננה טרנזקטיבית בהגדרה בניגוד לכל פעולה אחרת שאנו מכירים ב-SQL SERVER. אי לכך ישנו סיכון בעבודה עם FileTable, לדוגמא גיבוי מלא של בסיס הנתונים שהחל ב – 14:00 לא בהכרח יכיל בשיחזור את אותם ערכים בטבלאות ה- FileTable שהיו בשעה 14:00,מכיוון שפעולות הוספה שינוי ומחיקה דרך יישומי Win32 יכלו לבצע שינויים בזמן הגיבוי ללא שנוכל להבחין בכך. לעומת זאת שימוש ב-Filestream API של SQL על קבצים ב- FileTable יישמרו על טרנזקטיביות מלאה.

מבנה סכמת FileTable

איך מגדירים ומשתמשים ב- FileTable

לתשומת ליבכם דוגמאות הקוד שאציג יעבדו רק מגירסת "DENALI"  CTP2 והלאה בלבד .

דרישות קדם :

יש ליצור בסיס נתונים שיש בו FILESTREAM ויצירת SHARE בשם "DOCUMENTS"

CREATE DATABASE FileStreamDB
ON PRIMARY
(
NAME = FileStreamDB_data
,FILENAME = 'C:\Program Files\Microsoft SQL Server\ \MSSQL\DATA\FileStreamDB_data.mdf'
,SIZE = 10MB
,MAXSIZE = 50MB
,FILEGROWTH = 15%
),
FILEGROUP FileStreamDocements CONTAINS FILESTREAM DEFAULT
(
NAME = FSDocuments
,FILENAME = 'C:\FileTableDocuments'
-- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
)
with filestream
(non_transacted_access = full,
directory_name = 'Documents'
)

:  עם שם ספריה ידידותי למשתמש FileTableבשלב הזה יש לנו בסיס נתונים שמאפשר  ליצור עליו

CREATE TABLE Documents AS FILETABLE WITH(filetable_directory = 'Bussiness Documents')

ועכשיו בו ניצור תת ספריה שנקראית 'Word Documents' בעזרת פקודת TSQL :

INSERT INTO Documents (name,is_directory) VALUES ('Word Documents',1)

נוכל לראות FileTable ב-SSMS בצורה הבאה :

בנוסף אם נרצה נוכל לראות דרך SSMS את השיתוף שנוצר עם הסיפריות ,לתפריט נוספה האופציה :

כשנקיש על  "Explore File Table Directory" יפתח Windows Exlorer רגיל עם השיתוף :

עכשיו העתקתי מספר קבצי WORD לשיתוף בעזרת DRAG &  DROP :

באופן אוטומטי תתעדכן הטבלה בSQL SERVER:

שימוש ב-FULLTEXT עם FILETABLE

מה שראינו עד עכשיו נראה מרשים למדי ,אבל בואו ננסה לעשות משהו קצת יותר מתוחכם ,בואו נניח שאני מחפש את כל המסמכים בספריה שמכילים את המילה "בנק"  ליד המילה "חשבון" ,בקיצור חיפוש של FullText Search ,אפשרי בכלל ? אפשרי !

ניצור קודם כל קטלוג :

CREATE fulltext catalog ft AS default

כדי שנוכל לאנדקס FT חייבים לייצר אינדקס חד ערכי על הטבלה :

CREATE UNIQUE INDEX UNQ ON dbo.Documents(stream_id)

עכשיו ניצור FULLTEXT INDEX על המסמכים בסיפריה/טבלה :

CREATE FULLTEXT INDEX ON  Documents (file_stream Type column file_type) key index UNQ

כעת נוכל להריץ את שאילתת החיפוש :

SELECT  name,is_readonly,file_stream.GetFileNamespacePath() as FilePath,file_type
FROM  Documents where contains(file_stream,'חשבון NEAR בנק')

וקיבלתי שני מסמכים העונים לתנאי :

עכשיו אוכל למשל לעדכן את שמות המיסמכים ,ולסמן אותם לקריאה בלבד :

UPDATE documents SET is_readonly = 1 ,name = 'contain_bank_details_' + name
WHERE  contains(file_stream,'חשבון NEAR בנק')

סיכום

ברשומה זו סקרנו לכם על תכונה חדשה ומעניינת – FILETABLE.
FILETABLE הוא פיתוח חדשני שיצא בגרסה הבאה של SQL Server 2012
זוהי תכונה המבוססת על FILESTREAM שכבר הוצג בפנינו בגרסת 2008 ומשפר את חווית ונוחות השימוש בקבצים בבסיס הנתונים.
בהחלט יש למה לחכות לגרסה הבאה של MSSQL.

לנוחיותכם ולמי שרוצה לקרוא עוד על התכונה החדשה, מצורף לינק רשמי של Microsoft המתאר אותה:
http://msdn.microsoft.com/en-us/library/ff929144(v=sql.110).aspx

בנוסף, מצורף לינק המתאר את העבודה עם FILESTREAM:
http://msdn.microsoft.com/en-us/library/bb933995.aspx

אנחנו נמשיך לכתוב לכם ברשומות הבאות על עוד New features  מעניינים של Denali ועוד.
נתראה ברשומה הבאה !

דני רביד.

הקבצים ב-FILETABLE הנרשמים לסיפריה שומרים על טרנזקטיביות מלאה כמו כל ישות רלציונית אחרת ,וגיבויים ושיחזורים של בסיס הנתונים יכילו את המידע בקבצים אלה נכון לנקודת הזמן הרצויה

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

קהילת

קהילת ה- BI וה- BIG DATA מתכנסת ב- 28-10 !

שלום רב, למי שלא ידע 🙂 קהילת ה- BI וה- BIG DATA בעולמות Microsoft מתכנסת מידי חודש על מנת להפגש, להכיר ולשמוע הרצאות במגוון נושאים טכנולוגיים מרתקים בתחום. במפגש הקרוב (מספר 63) שיתקיים ב- 28-10-2015, יום רביעי [...]
הזמנה

הזמנה ל-SQL Saturday #481 – Israel 2016

שלום רב, בקרוב יתקיים בישראל כנס טכנולוגי מרכזי קהילת ה-DB וה-BI בתחום ה-SQL Server – ה-SQL Saturday! הכנס אשר מאורגן בהתנדבות על ידי אנשי הקהילה יכלול במהלכו מספר מסלולי לימוד בתחומים טכנולוגיים שונים. [...]

איך לבצע Sizing DB ב-Datacenter בארגונך בקלות (חלק א')

כחלק מהטמעות מוצרי IT תשתיתיים (כגון FWDB, מוצרי גיבוי, חוות Storage, מוצרי שו"ב ועוד…) בארגוני, אנו נדרשים המון פעמים לענות על שאלות לספקים כגון : מה גודל הכולל של ה –  Datacenter  ? מה חלוקת גודל ה [...]

תיעוד בסיס הנתונים – למה זה טוב?

ישנם מספר נושאים חשובים שיש לתת עליהם את הדעת בפיתוח ותכנון בסיס נתונים. כמובן שצריך לשים לב לנירמול נכון של הטבלאות, וכמובן שצריך להגדיר סטנדרט לכתיבה נכונה של הקוד, וכמובן שאי אפשר בלי [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: