คำถามติดแท็ก caching

คำถามเกี่ยวกับอัลกอริทึมแคชตามแอปพลิเคชันและการใช้งานแคชข้อมูลโดยเอ็นจิ้นฐานข้อมูลและแอปพลิเคชันที่เก็บข้อมูลและการนำเสนออื่น ๆ

3
แนวปฏิบัติที่ดีที่สุดสำหรับการแคชการแบ่งหน้าผลลัพธ์ที่การสั่งซื้อ / คุณสมบัติสามารถเปลี่ยนแปลงได้คืออะไร
แนวปฏิบัติที่ดีที่สุดสำหรับการแคชผลลัพธ์การค้นหาที่มีการเปลี่ยนแปลงการสั่งซื้อ / คุณสมบัติสามารถทำได้อย่างไร? พูดในแอปพลิเคชันของฉันมีคนต้องการเห็น 20 กระทู้การสนทนาล่าสุด (จาก 10,000) คำขอจะถูกส่งไปยังฐานข้อมูลservletเพื่อดึงข้อมูล 20 รายการแรกจากตารางหัวข้อการสนทนาเป็น XML / JSON หากพวกเขาต้องการที่จะเห็น 20 ถัดไปพวกเขาไปที่หน้าถัดไปของผลลัพธ์และสิ่งนี้จะดับคำขออื่นเพื่อรับล็อตถัดไป เพื่อลดการโหลดเซิร์ฟเวอร์และการรอลูกค้าฉันต้องการแคชหน้าผลลัพธ์ก่อนหน้า อย่างไรก็ตามฉันมีสองคำถาม: ตารางที่แสดงผลลัพธ์สามารถสั่งซื้อได้โดยมากกว่าหนึ่งแอตทริบิวต์ (เช่นวันที่สร้างเธรด, ผู้เขียนเธรด, วันสุดท้าย) ซึ่งหมายความว่าคำสั่งเช่น 'ผลลัพธ์ 20 อันดับแรก' ไม่มีเหตุผลหากไม่มีบริบท (กล่าวคือเรากำลังจัดเรียงอะไร) ส่วนหน้าแล้วสื่อสารกับส่วนหลังสิ่งที่โหลดไปแล้วได้อย่างไร ความคิดแรกของฉันคือการใช้ ID สำหรับแต่ละผลลัพธ์ แต่การส่งกลับไปที่เซิร์ฟเวอร์ตามคำขอในภายหลัง ฉันจะทำสิ่งนี้ได้อย่างไร จะเกิดอะไรขึ้นหากแอตทริบิวต์ของผลลัพธ์ที่ส่งคืนก่อนหน้านี้ (เช่นล่าสุดหลังวันที่) มีการเปลี่ยนแปลง จากนั้นเราต้องการวิธีการตรวจสอบผลลัพธ์แต่ละรายการเพื่อดูว่ามีการแก้ไขฝั่งเซิร์ฟเวอร์หรือไม่เนื่องจากมีการทำเพจเอาต์ฉันจะทำสิ่งนี้ได้อย่างไร

5
ฉันควรใช้โครงสร้างข้อมูลใดสำหรับกลยุทธ์การแคชนี้
ฉันกำลังทำงานกับแอปพลิเคชั่น. NET 4.0 ซึ่งทำการคำนวณค่อนข้างแพงในสองครั้งที่ส่งคืนเป็นสองเท่า การคำนวณนี้จะดำเนินการอย่างใดอย่างหนึ่งหลายพันในแต่ละรายการ การคำนวณเหล่านี้ดำเนินการในTaskเธรดพูลเธรด การทดสอบเบื้องต้นบางอย่างแสดงให้เห็นว่ามีการคำนวณแบบเดียวกันซ้ำแล้วซ้ำอีกดังนั้นฉันต้องการแคชผลลัพธ์n เมื่อแคชเต็มฉันต้องการที่จะโยนรายการที่ใช้บ่อยที่สุด ( แก้ไข:ฉันรู้น้อยที่สุด - ไม่สมเหตุสมผลเพราะเมื่อแคชเต็มและฉันจะแทนที่ผลลัพธ์ด้วยการคำนวณใหม่หนึ่งรายการนั้นจะใช้อย่างน้อยบ่อยครั้งและแทนที่ทันทีในครั้งถัดไปที่มีการคำนวณผลลัพธ์ใหม่ และเพิ่มลงในแคช) เพื่อที่จะนำสิ่งนี้ไปใช้ฉันคิดว่าจะใช้ a Dictionary<Input, double>(ซึ่งInputจะเป็น mini-class ที่เก็บค่าสองค่าสองอินพุต) เพื่อเก็บอินพุตและผลลัพธ์ที่แคชไว้ อย่างไรก็ตามฉันจะต้องติดตามเมื่อมีการใช้ผลลัพธ์ครั้งล่าสุด สำหรับสิ่งนี้ฉันคิดว่าฉันต้องการคอลเล็กชันที่สองที่จัดเก็บข้อมูลฉันจะต้องลบผลลัพธ์ออกจาก dictonary เมื่อแคชเริ่มเต็ม ฉันกังวลว่าการเรียงลำดับรายการนี้อย่างสม่ำเสมอจะส่งผลเสีย มีวิธีที่ดีกว่า (เช่นมีประสิทธิภาพมากกว่า) ในการทำเช่นนี้หรืออาจเป็นโครงสร้างข้อมูลทั่วไปที่ฉันไม่รู้จัก? ฉันควรทำโปรไฟล์ / การวัดประเภทใดเพื่อกำหนดประสิทธิภาพสูงสุดของการแก้ปัญหาของฉัน

4
เหตุใดการดูข้อความจึงมีความล่าช้าในเว็บไซต์ส่วนใหญ่
โปรดสังเกตว่าจำนวนการดูวิดีโอของ youtube มีความล่าช้าหรือไม่ ตัวอย่างเช่นวิดีโอมีความคิดเห็น 1,000 รายการและยังมีการเข้าชม 500 ครั้งและจะมีการเข้าชม 10,000 ครั้งหลังจากนั้น Youtube ไม่ได้อยู่คนเดียวในเรื่องนี้ กระดานข้อความส่วนใหญ่มีการใช้งานด้วยวิธีดังกล่าวและจำนวนการดูจะได้รับการอัปเดตทุก ๆ 10 นาที ไม่มีใครรู้เหตุผลที่อยู่เบื้องหลังสิ่งนี้? ขอบคุณ
10 caching 

3
มี CPU ที่ดำเนินการเพิ่มประสิทธิภาพการเขียนแคช L1 ที่เป็นไปได้หรือไม่
เมื่อ CPU ที่มีแคช L1 ทำการเขียนสิ่งที่เกิดขึ้นตามปกติคือ (สมมติว่าบรรทัดแคชที่กำลังเขียนอยู่ในแคช L1 อยู่แล้ว) แคช (นอกเหนือจากการอัปเดตข้อมูล) ทำเครื่องหมายว่าบรรทัดแคชนั้นสกปรก และจะเขียนบรรทัดที่มีข้อมูลที่ปรับปรุงในภายหลัง การปรับให้เหมาะสมอย่างหนึ่งที่เป็นไปได้คือให้แคชเปรียบเทียบเนื้อหาของการเขียนและเนื้อหาก่อนหน้าของแคชและถ้ามันเหมือนกันอย่าทำเครื่องหมายบรรทัดว่าสกปรก เนื่องจากสิ่งนี้อาจทำให้แคชสามารถหลีกเลี่ยงการเขียนกลับในบางโอกาสฉันสามารถดูว่าผู้ผลิต CPU อาจเห็นสิ่งนี้ว่าคุ้มค่ากับประตูที่ต้องใช้ในการทำตรรกะนี้ คำถามของฉัน: มีซีพียูที่ทำงานเพิ่มประสิทธิภาพนี้หรือไม่? ข้อมูลพื้นฐานเกี่ยวกับสาเหตุที่ฉันถาม: ฉันกำลังเขียนโค้ดบางอย่างที่จำเป็นต้องมีการเข้าถึงหน่วยความจำคงที่ นั่นคือคนที่สามารถฟังพฤติกรรมของแคชไม่ควรอนุมานสิ่งที่ฉันทำ การเข้าถึงของฉันบางอย่างเป็นการเขียนและวิธีที่ชัดเจนในการใช้รหัสนี้การเขียนจำนวนมากจะเขียนข้อมูลเดียวกันกับที่มีอยู่แล้ว ฉันต้องทำการเขียนเพราะขึ้นอยู่กับข้อมูลข้อมูลที่ฉันเขียนอาจจะเหมือนกันหรือไม่เหมือนกันและเป็นสิ่งสำคัญที่จะต้องดำเนินการเดียวกันโดยไม่คำนึงถึง หาก CPU ปรับให้เหมาะสมโดยการไม่เขียน 'no-change-write' นั่นหมายความว่าพฤติกรรมของแคชจะแตกต่างกันไปขึ้นอยู่กับสิ่งที่ฉันทำซึ่งจะทำลายเป้าหมายของฉัน ดังนั้นมี CPU ที่พยายามเพิ่มประสิทธิภาพการเขียนด้วยวิธีนี้หรือไม่
9 caching  cpu 

1
กำลังแคชคำขอที่ได้รับการรับรองความถูกต้องสำหรับผู้ใช้ทั้งหมด
ฉันกำลังทำงานกับเว็บแอปที่ต้องจัดการกับแรงกระตุ้นที่มีขนาดใหญ่มากของผู้ใช้งานพร้อมกันซึ่งต้องได้รับอนุญาตเพื่อขอเนื้อหาที่เหมือนกัน ในสถานะปัจจุบันมันหมดอำนาจโดยสิ้นเชิงแม้แต่กับ 32-core AWS instance (โปรดทราบว่าเราใช้ Nginx เป็น reverse proxy) การตอบสนองไม่สามารถแคชได้อย่างง่ายดายเนื่องจากในกรณีที่เลวร้ายที่สุดเราต้องตรวจสอบว่าผู้ใช้รับรองความถูกต้องโดยการถอดรหัส JWT หรือไม่ สิ่งนี้ทำให้เราต้องยิง Laravel 4 ซึ่งส่วนใหญ่เห็นด้วยช้าแม้เปิดใช้งาน PHP-FPM และ OpCache นี่คือสาเหตุส่วนใหญ่เนื่องมาจากขั้นตอนการบูตที่แข็งแกร่ง บางคนอาจถามคำถาม "ทำไมคุณถึงใช้ PHP และ Laravel ตั้งแต่แรกถ้าคุณรู้ว่านี่จะเป็นปัญหา?" - แต่มันสายเกินไปแล้วที่จะกลับไปตัดสินใจเรื่องนั้น! ทางออกที่เป็นไปได้ ทางออกหนึ่งที่ถูกนำมาใช้คือการแยกโมดูล Auth จาก Laravel ไปยังโมดูลภายนอกที่มีน้ำหนักเบา (เขียนในสิ่งที่เร็วกว่า C) ซึ่งมีหน้าที่รับผิดชอบในการถอดรหัส JWT และตัดสินใจว่าผู้ใช้รับรองความถูกต้องหรือไม่ การไหลของการร้องขอจะเป็น: ตรวจสอบว่าแคชโดนหรือไม่ (ถ้าไม่ผ่านไปยัง PHP ตามปกติ) ถอดรหัสโทเค็น ตรวจสอบว่ามันถูกต้อง หากถูกต้องให้บริการจากแคช หากไม่ถูกต้องให้บอก Nginx …

1
วิธีที่ดีที่สุดในการเร่งการเข้าถึงข้อมูลไปยังคลังข้อมูลสองแห่งคืออะไร?
ฉันกำลังดำเนินโครงการข่าวกรองธุรกิจซึ่งจะต้องมีการเข้าถึงข้อมูลที่เป็นนามธรรมไปยังคลังข้อมูลที่มีอยู่สองแห่ง ฉันต้องออกแบบสถาปัตยกรรมแอปพลิเคชันเพื่อให้ระบบธุรกิจอัจฉริยะแบบบริการตนเองเข้าร่วมข้อมูลและให้มุมมองเดียวกับคลังสินค้าที่มีอยู่สองแห่ง ฉันเกิดอะไรขึ้นกับสิ่งนี้: ฉันกำลังดิ้นรนกับชิ้นส่วนเสมือนจริง / แคชและสงสัยว่ามีรูปแบบการออกแบบองค์กรใด ๆ เพื่อแก้ปัญหาของฉันหรือไม่ สถาปัตยกรรมแบบนี้สามารถใช้ได้กับแผนผังดาวนามธรรมในคลังข้อมูลหรือไม่ ฉันกำลังดูผลิตภัณฑ์เช่นRed Hat JBoss Data VirtualizationและRed Hat JBoss Data Grid (รวมถึงอื่น ๆ ) เราไม่ได้ใช้ Hibernate ในปัจจุบันและความเข้าใจของฉันเกี่ยวกับ Data Grids คือพวกเขาเป็นที่เก็บคีย์ - ค่าหรือที่เก็บวัตถุและดังนั้นจึงไม่เหมาะสมสำหรับการแคชโมเดลเชิงสัมพันธ์ ฉันควรจะพูดถึงว่าเรามีความกระตือรือร้นที่จะใช้ผลิตภัณฑ์ของผู้จัดจำหน่ายสำหรับส่วนแดชบอร์ดบริการตนเอง แต่เราอาจลงเอยด้วยการสร้างแบบกำหนดเองบางอย่างในพื้นที่นี้หากผู้ขายไม่สามารถเสนอสิ่งที่เราต้องการทุกอย่าง

1
ความสัมพันธ์ระหว่างสายแคชและหน้าหน่วยความจำ
หากฉันถูกต้องหน้าในหน่วยความจำหลักเป็นหน่วยที่เล็กที่สุดสำหรับการถ่ายโอนข้อมูลระหว่างหน่วยความจำหลักและอุปกรณ์เก็บข้อมูลภายนอกเช่นฮาร์ดดิสก์ บรรทัดแคชของหน่วยความจำหลักเป็นหน่วยที่เล็กที่สุดสำหรับการถ่ายโอนข้อมูลระหว่างหน่วยความจำหลักและ cpu แคช ฉันสงสัยว่าขนาดหน้ากระดาษอยู่เสมอหรือดีที่สุดที่จะเป็นขนาดแคชของจำนวนบรรทัดปกติหรือไม่ หากขนาดบรรทัดแคชคือ 64 ไบต์และขนาดหน้าหน่วยความจำคือ 4KB ดังนั้นแต่ละหน้าจะมี 4KB / 64 ไบต์ == 64 บรรทัดแคชในนั้น หน้าและบรรทัดแคชทั้งวัตถุคงที่ในหน่วยความจำหรือไม่? หรือพวกเขาเป็นเพียงบล็อกที่ต่อเนื่องกันของหน่วยความจำขนาดหนึ่งซึ่งสามารถเริ่มต้นและลอยได้ทุกที่ภายในหน่วยความจำ เป็นเสมอหรือไม่ที่บรรทัดแคชไม่สามารถขยายได้มากกว่าหนึ่งหน้านั่นคือส่วนหนึ่งของบรรทัดแคชอยู่ในหน้าหนึ่งและอีกส่วนหนึ่งของบรรทัดแคชอยู่ในหน้าอื่นหรือไม่ ขอบคุณ
9 memory  caching 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.