ข้ามไปยังเนื้อหา

ข้อมูลนี้อยู่ที่ไหน?

มีให้อ่านอีก 28 ภาษา

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A desk in the foreground, a filing cabinet in the next room through an open door, and through the window a shed with archive boxes at the back of the yard.
ภาพสร้างด้วย AI

โมดูลที่ 4 จาก 10 ในบท สถาปัตยกรรมข้อมูล Salesforce บทที่ 3 ของหลักสูตร Data Architect แต่ละโมดูลอ่านแยกกันได้ ก่อนหน้า: สร้างเอง: ออบเจกต์ที่กำหนดเอง · ถัดไป: เลือกออบเจกต์ให้ถูก

คำถามที่โมดูลนี้ตอบ: ก่อนที่คุณจะสร้างออบเจกต์ ข้อมูลนี้ควรอยู่ที่ไหนจริงๆ: บน core ใน Salesforce อ้างอิงจากที่ที่มันอยู่แล้ว หรือเก็บถาวร?

ขอถามคำถามหนึ่ง มีความต้องการใหม่วางอยู่บนโต๊ะคุณ คุณทำอะไรเป็นอย่างแรก?

ถ้าคุณเหมือนพวกเราส่วนใหญ่ คุณเปิด Setup แล้วสร้างออบเจกต์ที่กำหนดเอง ผมเข้าใจ ในสิบนาทีคุณก็ได้แท็บ เลย์เอาต์หน้า และ list view และนี่คือสิ่งที่ผมบอกทุกคลาส: ทันทีที่คุณสร้างออบเจกต์ใหม่นั้น คุณก็กำลังคิดแบบสถาปนิกอยู่แล้ว ไม่ว่าจะตั้งใจหรือไม่ เพราะทุกออบเจกต์ที่คุณสร้างคือพันธะ มันใช้พื้นที่จัดเก็บ มันพ่วงข้อจำกัดมา มันได้โมเดลการแชร์ ไม่ว่าคุณจะออกแบบไว้หรือไม่ มันต้องมีสิทธิ์การใช้งานสำหรับทุกคนที่แตะมัน และเมื่อคนและการผสานรวมพึ่งพามันแล้ว ก็ขอให้โชคดีกับการเอามันออก

ดังนั้นการตัดสินใจเชิงสถาปัตยกรรมข้อแรกไม่ใช่ออบเจกต์ตัวไหน แต่คือข้อมูลนี้ควรอยู่ที่ไหน? ตัดสินข้อนี้ให้ถูก แล้วประเภทออบเจกต์ก็แทบจะเลือกตัวเอง

ก่อนอื่น คำหนึ่งที่ผมจะใช้บ่อย: core core คือแพลตฟอร์ม Salesforce ที่ org ของคุณทำงานอยู่: แพลตฟอร์มแบบ multitenant ที่ขับเคลื่อนด้วยเมทาดาทาจากโมดูลที่ 1 ที่ที่ออบเจกต์ของ Sales และ Service จากโมดูลที่ 2 อยู่ รวมถึงออบเจกต์ที่กำหนดเองทุกตัวที่คุณสร้างในโมดูลที่ 3 เมื่อผมบอกว่าข้อมูลอยู่บน core ผมหมายถึงมันถูกเก็บใน org ของคุณ ในออบเจกต์ของมัน

ไม่ใช่ข้อมูลทั้งหมดที่อยู่ตรงนั้น Data 360 เก็บข้อมูลของมันในที่เก็บของตัวเอง นอกออบเจกต์ของ org คุณ (มันเป็น near-core (ใกล้ core): จัดการบน core แต่ข้อมูลโฮสต์อยู่นอก core ดูเพิ่มเติมในบทที่ 4) แล้วก็ยังมีทุกอย่างที่บริษัทของคุณใช้งานซึ่งไม่ใช่ Salesforce เลย: ERP คลังข้อมูล ระบบคำสั่งซื้อ แพลตฟอร์มของพันธมิตร ทั้งหมดนั้นอยู่นอก core Salesforce เข้าถึงมันได้ แสดงมันได้ และใช้มันได้ แต่ org ของคุณไม่ได้เก็บมัน

บน core มีออบเจกต์สองประเภทที่เก็บเรกคอร์ดของคุณจริงๆ: sObject ทั้งมาตรฐานและกำหนดเอง (__c) และ big object (__b) นอก core คุณเข้าถึงข้อมูลผ่านออบเจกต์ภายนอก (__x) และเครื่องมือการผสานรวมอื่นๆ จำคำต่อท้ายจากโมดูลที่ 3 ไว้ มันบอกคุณได้ว่าข้อมูลชิ้นหนึ่งอยู่ที่ไหนแค่จากชื่อ

ผมคิดถึงมันเหมือนสำนักงาน บางอย่างควรอยู่บนโต๊ะของคุณ ที่คุณใช้ทุกวัน บางอย่างคุณแค่ต้องไปเปิดดูในตู้เอกสารของคนอื่น และบางอย่างก็ใส่กล่องไว้ในโรงเก็บของหลังบ้าน นั่นให้คำตอบสามแบบแก่ผม

ข้อมูลถูกสร้าง เปลี่ยน และใช้ใน Salesforce ทุกวัน: บัญชี เคส โอกาสทางการขาย ใบสั่งงาน การเก็บมันไว้ใน sObject ก็เหมือนเก็บไว้หน้าสำนักงาน นี่คือสิ่งที่ออบเจกต์มาตรฐานและที่กำหนดเองมีไว้ และคุณได้ทุกอย่าง: เลย์เอาต์หน้า การแชร์ ระบบอัตโนมัติ การทำรายงาน การค้นหา และตอนนี้ฟีเจอร์ AI ที่สร้างบนโมเดลข้อมูล

แต่โต๊ะของคุณไม่ฟรี ข้อมูลบน core มีต้นทุนพื้นที่จัดเก็บ นับแบบที่ Salesforce นับ ทีละเรกคอร์ด ไม่ใช่ทีละคอลัมน์ และเอกสารนับรวมในพื้นที่จัดเก็บไฟล์แยกต่างหาก เราพูดถึงทั้งสองเรื่องในโมดูลที่ 2 รูปถ่ายและภาพสแกนปริมาณมากมักควรอยู่นอก core โดย Salesforce เก็บไว้แค่ลิงก์

ข้อมูลเป็นของระบบอื่น (ERP คลังข้อมูล แพลตฟอร์มคำสั่งซื้อ) และระบบนั้นยังเป็นแหล่งความจริง ผู้ใช้ต้องเห็นมันใน Salesforce อาจเชื่อมมันกับเรกคอร์ด แต่ Salesforce ไม่จำเป็นต้องมีสำเนาของตัวเอง คุณจะได้ยินคนเรียกสิ่งนี้ว่าข้อมูลเสมือน (virtual) ด้วย: มันปรากฏใน Salesforce แบบเสมือน โดยไม่เคยถูกเก็บไว้ที่นั่นเลย

นั่นคือออบเจกต์ภายนอก (external object) ผ่าน Salesforce Connect ผมชอบพูดว่ามันหน้าตาเหมือนเป็ด เดินเหมือนเป็ด แต่ไม่ใช่เป็ด มันปรากฏเหมือน sObject: คุณวางมันบนเลย์เอาต์หน้าและ related list ได้ และเชื่อมมันกับเรกคอร์ดของคุณเองด้วย external lookup และ indirect lookup ได้ แต่ข้อมูลไม่ได้ถูกเก็บบน core ทุกครั้งที่คุณแตะมัน มันจะเรียกออกไปภายนอก (callout) เปิดเรกคอร์ด โหลด related list รันรายงาน แล้ว Salesforce ก็ไปถามอีกระบบ นั่นหมายถึงความหน่วง และหน้าของคุณพร้อมใช้งานได้เท่ากับระบบที่อยู่เบื้องหลังเท่านั้น

คนมักแย้งเรื่องค่าสิทธิ์การใช้งาน ดังนั้นลองคำนวณแบบที่ผมทำในคลาส Connect คิดสิทธิ์ต่อ endpoint และ endpoint หนึ่งดึงออบเจกต์เข้ามาได้หลายตัว ทีนี้ถามว่าการสร้างและดูแลทางเลือกอื่นมีต้นทุนเท่าไร: คอมโพเนนต์ที่กำหนดเอง โค้ด callout เบื้องหลัง และนักพัฒนาที่ต้องสแตนด์บายเมื่อมันพัง บ่อยครั้งสิทธิ์การใช้งานถูกกว่า และผู้ดูแลระบบของคุณตั้งค่ามันได้โดยไม่ต้องเขียนโค้ดสักบรรทัด จุดที่มันไม่เหมาะ: ข้อมูลที่ผู้ใช้แก้ไขทั้งวัน หรือทำรายงานหนักๆ

เอกสารก็อ้างอิงได้เช่นกัน ถ้าสัญญาอยู่ใน SharePoint Online, OneDrive, Google Drive หรือ Box อยู่แล้ว Files Connect ช่วยให้ผู้ใช้เข้าถึงมันจาก Salesforce ได้โดยไม่ต้องคัดลอกเข้ามา

Salesforce Connect ไม่ใช่วิธีเดียวในการอ้างอิงข้อมูล บางครั้งมันคือตรรกะที่เขียนเอง (custom logic): โค้ดที่เรียกอีกระบบแบบเรียลไทม์และแสดงข้อมูลของมันบนหน้า โดยไม่เก็บสำเนาไว้ นั่นให้การควบคุมเต็มที่แก่คุณ และความรับผิดชอบเต็มที่ต่อ callout ข้อผิดพลาด และการดูแลรักษา และ Data 360 ก็ทำ federation ได้โดยไม่ต้องคัดลอกเช่นกัน ตัวเลือกนั้นมีบทของมันเอง (Virtualization, Federation และ Zero-Copy) ที่นี่ ประเด็นคือตัวการตัดสินใจ: อ้างอิง อย่าคัดลอก

3. เก็บถาวร (archived): มันไปอยู่ในโรงเก็บของหลังบ้าน

หัวข้อที่มีชื่อว่า “3. เก็บถาวร (archived): มันไปอยู่ในโรงเก็บของหลังบ้าน ”

ประวัติ บันทึกการตรวจสอบ ธุรกรรมเก่า คุณต้องเก็บมัน บางครั้งหลายปี แต่แทบไม่มีใครเปิดมัน และนี่คือเรื่องที่ทีมมักเลื่อนออกไป เมื่อคลาสบอกผมว่ามีออบเจกต์ที่มี 50 ล้านเรกคอร์ดแล้วถามว่าทำไมต้องเก็บถาวร ผมถามกลับว่า: ถ้าคุณไม่เก็บถาวรวันนี้ คุณจะได้เก็บถาวรไหม? ที่ 50 ล้านวันนี้ คุณกำลังมุ่งไปที่ 100, 150, 200 ล้าน

มีโรงเก็บของสองแห่ง แห่งหนึ่งอยู่บน core: big object ให้คิดว่ามันคือการเก็บข้อมูลไว้ในโรงรถ คุณเก็บเรกคอร์ดได้จำนวนมหาศาล แต่วางมันบนเลย์เอาต์หน้าไม่ได้ ไม่มี UI หรือรายงานมาตรฐาน และคุณคิวรีผ่านอินเด็กซ์ของ big object ด้วยการตรงกันพอดีหรือช่วงค่า (Big Objects Best Practices (opens in a new tab)) ความปลอดภัยมีแค่สิทธิ์ระดับออบเจกต์และฟิลด์ ไม่มีการแชร์ระดับเรกคอร์ด และระบบอัตโนมัติไม่ทำงานบนมัน ผมใช้ Salesforce Connect มาหลายสิบครั้ง แต่ใช้ big object แค่หนึ่งหรือสองครั้ง มันใช้ได้ แต่เก้งก้าง และผมเขียนวิธีแก้ทางเพื่อเข้าถึงข้อมูลมาไม่น้อย ดังนั้นคำแนะนำของผมคือ: ทำต้นแบบก่อนจะเสนอมัน และวางแผนว่าคนจะหาข้อมูลอย่างไรก่อนเลือกมัน

โรงเก็บของอีกแห่งอยู่นอก core: คลังข้อมูลหรือฐานข้อมูลที่อื่น (การออกแบบเพื่อรองรับขนาด) บ่อยครั้งนั่นคือโรงเก็บของที่ดีกว่า และมันไม่จำเป็นต้องอยู่ลับตา ข้อมูลที่เก็บถาวรนอก core ยังปรากฏในรายงานได้ผ่านเครื่องมืออย่าง Tableau และยังเข้าถึงได้จาก Salesforce ผ่าน Salesforce Connect หรือวิธีอื่นในการทำให้มันเป็นข้อมูลเสมือน เมื่อมีคนต้องการมองย้อนกลับไป

ขอเล่าเรื่องโปรเจกต์ที่เราทำเรื่องนี้ถูกตั้งแต่แรก ลูกค้าค้าปลีกรายหนึ่งมีสถานที่กว่า 1,200 แห่ง พวกเขาบอกผมว่า “เรามีนัดหมายแค่วันละร้อยรายการต่อสาขา ไม่ใช่เรื่องใหญ่” แล้วผมก็คำนวณ: วันละร้อย สัปดาห์ละหกวัน (ประมาณ 305 วันต่อปี) คูณ 1,200 แห่ง คือนัดหมายกว่า 36 ล้านรายการต่อปี แล้วพวกเขาก็บอกว่าการมาแต่ละครั้งสร้างนัดหมายสองรายการ หนึ่งที่เคาน์เตอร์หน้าร้าน และหนึ่งสำหรับหลังร้าน: กว่า 73 ล้านเรกคอร์ดต่อปี แล้วพวกเขาก็ต้องการประวัติห้าปี: มากกว่า 360 ล้านเรกคอร์ด ก่อนจะคิดการเติบโตใดๆ เรายังไม่ได้ go-live แต่ผมเห็นรถไฟกำลังมุ่งตรงไปยังสถานีข้อมูลปริมาณมากแล้ว ระบบเก็บถาวรจึงถูกสร้างก่อนเราจะเก็บนัดหมายสักรายการ: นัดหมายเก่าย้ายไปที่ big object และหน้าค้นหาแสดงนัดหมายปัจจุบัน โดยมีรายการที่เก็บถาวรอยู่ข้างล่าง หลายปีต่อมา มันยังทำงานได้ดี

ข้อมูลนี้อยู่ที่ไหน? สามช่อง บน core คือโต๊ะทำงานของคุณ: ข้อมูลที่ใช้ทำงานทุกวัน ใน sObject มาตรฐานและที่กำหนดเองซึ่งลงท้ายด้วย __c พร้อม page layout การแชร์ ระบบอัตโนมัติและรายงาน และใช้พื้นที่เก็บข้อมูลและพื้นที่เก็บไฟล์ อ้างอิง คือตู้เอกสารของคนอื่น: ระบบอื่นเป็นแหล่งความจริง เข้าถึงแบบเสมือนผ่านออบเจกต์ภายนอกของ Salesforce Connect ที่ลงท้ายด้วย __x หรือการเรียกแบบเรียลไทม์ที่เขียนเอง ทุกการแตะคือ callout และพร้อมใช้ได้เท่าที่ต้นทางพร้อมเท่านั้น เก็บถาวร คือโรงเก็บของหลังบ้าน: เก็บไว้หลายปีและแทบไม่เปิด บน core อยู่ใน big object ที่ลงท้ายด้วย __b หรือนอก core อยู่ในคลังข้อมูลหรือฐานข้อมูล และยังค้นเจอได้ผ่าน Tableau หรือ Salesforce Connect ข้างใต้: บน core หมายถึงเก็บอยู่ใน org ของคุณ นอก core หมายถึงที่เก็บของ Data 360 เอง และทุกระบบที่ไม่ใช่ Salesforce บน core โต๊ะทำงานของคุณ ใช้ทำงานทุกวัน sObject มาตรฐานและที่กำหนดเอง, __c เลย์เอาต์ การแชร์ ระบบอัตโนมัติ รายงาน ใช้พื้นที่เก็บข้อมูลและไฟล์ อ้างอิง ตู้เอกสารของคนอื่น ระบบอื่นเป็นแหล่งความจริง เสมือน: Connect __x หรือการเรียกที่เขียนเอง ทุกการแตะคือ callout พร้อมใช้ได้เท่าที่ต้นทางพร้อม เก็บถาวร โรงเก็บของหลังบ้าน เก็บไว้หลายปี แทบไม่เปิด บน core: big object, __b นอก core: คลังข้อมูลหรือฐานข้อมูล ยังค้นเจอ: Tableau, Connect บน core: เก็บใน org ของคุณ นอก core: ที่เก็บของ Data 360 เอง และทุกระบบที่ไม่ใช่ Salesforce © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Steve Trucking คือสถานการณ์ที่เราใช้ต่อเนื่อง: บริษัทจัดส่งไมล์สุดท้ายของครอบครัว ที่รับเครื่องใช้ไฟฟ้าและอุปกรณ์อิเล็กทรอนิกส์จากศูนย์กระจายสินค้าของร้านค้าปลีกรายใหญ่ แล้วจัดส่งและติดตั้งที่บ้านลูกค้า ข้อมูลสี่ประเภทของบริษัท คำตอบสามแบบ:

ข้อมูลอยู่ที่ไหนทำไม
การจัดส่ง ทีม และนัดหมายของวันนี้บน coreผู้จัดการเดินรถและทีมทำงานกับมันทั้งวัน
รายละเอียดคำสั่งซื้อของร้านค้าปลีกอ้างอิง (หรือสำเนาบางๆ บน core)ระบบของร้านค้าปลีกเป็นแหล่งความจริง
ประวัติการจัดส่งเมื่อสามปีก่อนเก็บถาวรเก็บไว้สำหรับการเคลมและดูแนวโน้ม แทบไม่มีใครเปิด
รูปถ่ายการจัดส่งนอก core พร้อมลิงก์หลายพันรูปต่อวัน เก็บนอก Salesforce โดยมีลิงก์บนการจัดส่ง

นี่คือสิ่งเดียวกันในรูปโมเดลข้อมูล การจัดส่งอยู่บน core ที่ที่คนทำงานกับมันทั้งวัน เมื่อผ่านไปสามปี มันย้ายไปที่ Delivery History ซึ่งเป็น big object: ยังอยู่บน core แต่ไปอยู่ในโรงเก็บของ คำสั่งซื้อของพันธมิตรปรากฏเป็นออบเจกต์ภายนอก __x: Salesforce เชื่อมการจัดส่งเข้ากับมัน แต่ข้อมูลยังอยู่ในระบบของร้านค้าปลีก และรูปถ่ายอยู่นอก core ทั้งหมด โดยมีลิงก์จากการจัดส่ง โมเดลเดียว บ้านสามหลัง

Steve Trucking บน core และนอก core ข้อมูลของ Steve Trucking ในสองโซน บน core: พันธมิตรค้าปลีกส่งการจัดส่ง และหลังจากสามปี การจัดส่งแต่ละรายการย้ายไปที่ประวัติการจัดส่ง ซึ่งเป็น big object ที่ลงท้ายด้วย __b ยังอยู่บน core แต่เก็บถาวร นอก core: การจัดส่งแต่ละรายการตอบสนองคำสั่งซื้อของพันธมิตรหนึ่งรายการ ซึ่งเป็นออบเจกต์ภายนอกที่ลงท้ายด้วย __x และข้อมูลยังอยู่ในระบบของผู้ค้าปลีก และลิงก์ไปที่รูปถ่ายการจัดส่งที่เก็บในคลังรูปถ่ายนอก Salesforce บน CORE นอก CORE ส่ง ตอบสนอง ลิงก์ไปที่ ย้ายไปที่ พันธมิตรค้าปลีก บน core: บัญชี การจัดส่ง บน core: ใช้ทำงานทั้งวัน ประวัติการจัดส่ง (__b) บน core เก็บถาวร: big object คำสั่งซื้อของพันธมิตร (__x) นอก core: ระบบของผู้ค้าปลีก รูปถ่ายการจัดส่ง นอก core: คลังรูปถ่าย หนึ่งพอดี ศูนย์หรือหนึ่ง หนึ่งหรือหลาย ศูนย์หรือหลาย © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

ทุก org จริงมีครบทั้งสามแบบ org ที่เจอปัญหาคือ org ที่วางทุกอย่างไว้บน core เพราะการสร้างออบเจกต์คือปุ่มค่าเริ่มต้น

  • บ้านของข้อมูลแต่ละประเภท ก่อนออกแบบออบเจกต์ใดๆ: บน core อ้างอิง หรือเก็บถาวร
  • แหล่งความจริง ถ้าระบบอื่นเป็นเจ้าของข้อมูล Salesforce ไม่ควรกลายเป็นตัวหลักที่สองอย่างเงียบๆ
  • เส้นทางการเข้าถึงสำหรับทุกสิ่งที่อยู่นอก core ข้อมูลที่อ้างอิงต้องมีแหล่งที่พร้อมใช้งานและความหน่วงที่ยอมรับได้ ข้อมูลที่เก็บถาวรต้องมีวิธีให้คนหามันเจอ
  • การเติบโตของพื้นที่จัดเก็บ คำนวณตอนนี้ (เรกคอร์ดต่อวัน คูณการเติบโต คูณระยะเวลาเก็บรักษา) ไม่ใช่ตอนที่คำเตือนพื้นที่จัดเก็บมาถึง

นอกเหนือจากการสอบ: AI ยกระดับความเสี่ยงของ “บน core” ฟีเจอร์ AI และเอเจนต์ทำงานได้ดีที่สุดกับข้อมูลที่แพลตฟอร์มเข้าใจ: ข้อมูลในออบเจกต์มาตรฐานและที่กำหนดเอง ที่ตั้งชื่อและอธิบายไว้ดี นั่นเป็นแรงดึงให้วางข้อมูลบน core มากขึ้น ต้านมันไว้สำหรับข้อมูลที่ไม่ควร เอเจนต์ที่อ้างอิงสำเนาข้อมูล ERP ที่เก่าแล้วจะให้คำตอบที่มั่นใจแต่ผิด บ่อยครั้งทางที่ดีกว่าคืออ้างอิงแหล่งที่มีชีวิต หรือเก็บส่วนเล็กๆ ที่อธิบายไว้ดีไว้บน core ที่ที่ AI อ่านข้อมูลตอนนี้เป็นส่วนหนึ่งของการตัดสินใจว่าข้อมูลอยู่ที่ไหน