Saya menerapkan basis data grafik untuk sistem manajemen inventaris besar yang melibatkan berbagai jenis wadah dan lokasi. Saat membuat tata letak awal, saya memiliki {items} yang "containedBy" {boxes} yang "containedBy" {shelves}. Keputusan yang saya cari melibatkan lokasi yang diharapkan vs lokasi sebenarnya.

Dalam inventaris kami, ada kemungkinan barang-barang yang diharapkan ada di dalam kotak tidak ada saat kotak dibuka. Hal ini terkait dengan pengelolaan hulu oleh vendor. Saat menerima manifes, saya akan membuat simpul di database bersama dengan tepinya untuk mewakili item yang ada di dalam kotak. Ketika kotak dibuka, saya akan memperbarui database selama proses penerimaan. Yang ingin saya ketahui adalah ini: Apakah lebih baik menggunakan tepi "expectedContainedBy" dan "containedBy" untuk mewakili kemungkinan dan penahanan aktual, atau apakah lebih baik memiliki satu tepi "containedBy" dengan properti "Present: benar salah".

Pertanyaan saya di sini bukan dari sudut pandang preferensi, tetapi dari efisiensi untuk tujuan pengambilan dan analitik. Saya telah melihat ini sedikit, tetapi saya tidak yakin apakah mencari satu set tepi dengan properti akan lebih efisien daripada mencari dengan label tepi, atau jika database akan tumbuh terlalu besar dengan memiliki begitu banyak tepi.

Edit untuk klarifikasi: Database adalah database grafik Azure CosmosDB menggunakan GREMLIN untuk bahasa kueri kami.

0
Carson 11 Mei 2021, 19:50

2 jawaban

Jawaban Terbaik

Tanpa berpikir terlalu keras, saya akan mengatakan bahwa saya lebih suka "containedBy" dengan properti "present" boolean. Rasanya alami bagi saya dan ketika saya memikirkan GREMLIN Anda mungkin akan menulis untuk menanyakan data ini bahwa desain harus membuat kueri cukup mudah dibaca.

Untuk efisiensi, itu tergantung. Jika Anda hanya berharap memiliki sepuluh tepi "containedBy" per kotak, maka menurut saya tidak banyak yang perlu dipertimbangkan dalam hal efisiensi. Di sisi lain, puluhan ribu tepi "yang dikandung" mungkin akan menjadi cerita yang berbeda. Pada saat itu Anda perlu mempertimbangkan kemampuan basis data grafik Anda dan jenis kueri yang ingin Anda tulis. Misalnya, dengan beberapa (sebagian besar?) grafik, Anda mungkin melihat bahwa untuk puluhan ribu tepi per simpul "kotak" akan lebih cepat untuk memiliki dua label terpisah. Atau mungkin jika Anda menggunakan grafik seperti JanusGraph yang memiliki indeks vertex centric, Anda mungkin menemukan bahwa menambahkan indeks pada "present" memberi Anda kinerja yang Anda inginkan sambil menjaga desain bersih dari satu label "containedBy".

1
stephen mallette 11 Mei 2021, 18:07

Jika saya membalik masalah ini, saya melihat objek Jadwal. Item ditautkan ke Jadwal dan Jadwal ditautkan ke semua lokasi, masa lalu, sekarang, dan masa depan, di mana item telah, sedang, dan akan disimpan. Objek Lokasi tersebut (kotak, rak, dll.) semuanya terkait dengan semua hal yang telah melewati lokasi tersebut. Sebelum item tiba, mengetahui bahwa mereka akan tiba, jadwal dapat dibuat sehubungan dengan jadwal aktif lainnya. Anda dapat bertanya kepada "sistem" rak mana yang akan tersedia pada pukul 11:15 untuk menyimpan pendatang baru.

Mengapa beberapa sayuran membusuk lebih cepat daripada yang lain? Anda dapat memeriksa riwayat penyimpanan dan melihat apakah sayuran yang membusuk berbagi lokasi penyimpanan atau wilayah gudang yang sama.

1
djhallx 12 Mei 2021, 13:58