2013-10-04 12 views
34

Słyszałem o MongoDB, ale nie jestem pewien, czy w pełni rozumiem tę koncepcję.Przechowywanie i wysyłanie zapytań do JSON z bazy danych

Jeśli mam wiele obiektów JSON przechowywane w MongoDB:

[{"id": "peter", 
    "age": "12", 
    "gender": "male"}, 
{"id": "gemma", 
    "age": "12", 
    "gender": "female"}, 
{"id": "paul", 
    "age": "13", 
    "gender": "male"}] 

Jak będę w stanie zbadać wszystkie obiekty JSON z age >= 12?

Odpowiedz

41

Po pierwsze, zrozum, że JSON to tylko technika serializacji. Sama ta metoda serializacji prawdopodobnie nie powinna determinować twojego medium utrwalania. Patrząc na twoje pytanie na powierzchni, wygląda na to, że szukasz typowej bazy danych relacyjnej pamięci masowej, w której możesz użyć SQL do elastycznego sprawdzania danych.

Serializacja/deserializacja danych JSON do przechowywania lub prezentacji po wyszukaniu z takiej relacyjnej bazy danych jest banalna praktycznie w każdym języku programowania.

Teraz, jeśli naprawdę potrzebujesz przechowywać różne fragmenty dokumentów JSON (lub jakiegokolwiek innego rodzaju dokumentu), które tak naprawdę nie mają stałej struktury, to tak naprawdę, kiedy zazwyczaj zaczynasz szukać rozwiązania typu NoSQL, takiego jak jako MongoDB. Innym możliwym scenariuszem korzystania z bardziej popularnych baz danych NoSQL jest sytuacja, gdy mamy do czynienia z ogromnymi ilościami danych i musimy skalować w poziomie (tj. Dane są tak duże, że trzeba skalować bazę danych na wiele serwerów). Wiele systemów NoSQL czyni to znacznie łatwiej niż tradycyjne relacyjne bazy danych. Oczywiście w takim scenariuszu należałoby następnie ocenić te narzędzia w oparciu o zapewnioną przez nich funkcjonalność, umożliwiając odczytywanie, zapisywanie i wyszukiwanie danych w najbardziej przydatny sposób dla przypadków użycia.

+0

dziękuję mike , Zajmuję się tylko pracą w terenie nad przechowywaniem facebookowych obiektów użytkownika dla projektu badawczego - co oznacza skalowanie w poziomie? – Jakob

+3

@Jakob Przez skalowanie w poziomie, mam na myśli, że masz do czynienia z tak dużym obciążeniem, że potrzebujesz wielu węzłów/serwerów, aby sobie z nim poradzić. Skalowanie poziome jest historycznie bardziej problematyczne dla relacyjnych baz danych niż dla magazynów dokumentów NoSQL. –

5

Jeśli wszystkie twoje obiekty mają te same pola (identyfikator, wiek, płeć itp.), To należy je przechowywać jako wiersze relacyjnej bazy danych (np. MySQL).

12

MongoDB przechowuje dane w formacie BSON, które są podobne do JSON. Możesz przechowywać dane w formacie JSON i możesz utworzyć zapytanie w dowolnym polu. Możesz nawet indeksować dane pole, które jest używane w przypadku dużych zapytań.

Nie jesteś ograniczony do MongoDB, Widząc twoje pytanie myślę, że którykolwiek z magazynów dokumentów będzie pasował do twoich potrzeb. Tutaj przeczytasz więcej: - http://en.wikipedia.org/wiki/Document-oriented_database

11

Począwszy od wersji 5.7, MySQL ma teraz natywną nazwę JSON datatype. Zakładając, że tabela jest nazywany students a kolumna JSON nazywa student, w MySQL 5.7 Twój select można zapisać jako

SELECT * FROM students WHERE JSON_EXTRACT(student, '$.age') = 12; 
+1

Warto podkreślić, że jest to coś więcej niż ciąg znaków z pewną logiką. MySQL przechowuje te dane w sposób, który pozwala szybko uzyskać poszczególne pola - że $ .age jest pojedynczym pobieraniem, nie musi analizować oryginalnego JSON, aby wyodrębnić tę wartość. –

0

Zapytanie MongoDB powłoki na które może wyglądać następująco:

db.people.find({"age": {gt:12 }}); 
Powiązane problemy