Spaces:
Sleeping
Sleeping
Gordon Li
commited on
Commit
·
be09ab2
1
Parent(s):
117ae8e
SQL Performance tuned
Browse files- AirbnbMapVisualiser.py +23 -8
AirbnbMapVisualiser.py
CHANGED
@@ -14,6 +14,15 @@ class AirbnbMapVisualiser:
|
|
14 |
'password': '7033',
|
15 |
'dsn': 'imz409.ust.hk:1521/imz409'
|
16 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
self.tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
|
18 |
self.traffic_manager = TrafficSpotManager(self.connection_params)
|
19 |
|
@@ -29,9 +38,11 @@ class AirbnbMapVisualiser:
|
|
29 |
self.cached_listings = {}
|
30 |
|
31 |
def get_all_neighborhoods(self):
|
|
|
32 |
try:
|
33 |
-
|
34 |
-
cursor =
|
|
|
35 |
cursor.execute("""
|
36 |
SELECT DISTINCT NEIGHBOURHOOD
|
37 |
FROM airbnb_master_data
|
@@ -43,15 +54,17 @@ class AirbnbMapVisualiser:
|
|
43 |
except Exception as e:
|
44 |
print(f"Database error getting neighborhoods: {str(e)}")
|
45 |
return []
|
|
|
|
|
46 |
|
47 |
def get_neighborhood_listings(self, neighborhood):
|
48 |
-
|
49 |
if neighborhood in self.cached_listings:
|
50 |
return self.cached_listings[neighborhood]
|
51 |
-
|
52 |
try:
|
53 |
-
|
54 |
-
cursor =
|
|
|
55 |
cursor.execute("""
|
56 |
SELECT m.ID, m.NAME, m.HOST_NAME, m.NEIGHBOURHOOD,
|
57 |
m.LATITUDE, m.LONGITUDE, m.ROOM_TYPE, m.PRICE,
|
@@ -59,7 +72,7 @@ COUNT(r.LISTING_ID) as NUMBER_OF_REVIEWS, m.REVIEWS_PER_MONTH,
|
|
59 |
m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
60 |
FROM airbnb_master_data m
|
61 |
LEFT JOIN airbnb_reviews_data r ON m.ID = r.LISTING_ID
|
62 |
-
WHERE m.LATITUDE IS NOT NULL AND m.LONGITUDE IS NOT NULL AND NEIGHBOURHOOD = :neighborhood
|
63 |
GROUP BY m.ID, m.NAME, m.HOST_NAME, m.NEIGHBOURHOOD,
|
64 |
m.LATITUDE, m.LONGITUDE, m.ROOM_TYPE, m.PRICE,
|
65 |
m.REVIEWS_PER_MONTH, m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
@@ -72,6 +85,8 @@ m.REVIEWS_PER_MONTH, m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
|
72 |
except Exception as e:
|
73 |
print(f"Database error: {str(e)}")
|
74 |
return []
|
|
|
|
|
75 |
|
76 |
def get_listing_reviews(self, listing_id):
|
77 |
try:
|
@@ -85,7 +100,7 @@ m.REVIEWS_PER_MONTH, m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
|
85 |
ELSE COMMENTS
|
86 |
END as COMMENTS
|
87 |
FROM AIRBNB_REVIEWS_DATA
|
88 |
-
WHERE LISTING_ID = :listing_id
|
89 |
ORDER BY REVIEW_DATE DESC
|
90 |
""", listing_id=str(listing_id))
|
91 |
reviews = cursor.fetchall()
|
|
|
14 |
'password': '7033',
|
15 |
'dsn': 'imz409.ust.hk:1521/imz409'
|
16 |
}
|
17 |
+
self.pool = oracledb.SessionPool(
|
18 |
+
user=self.connection_params['user'],
|
19 |
+
password=self.connection_params['password'],
|
20 |
+
dsn=self.connection_params['dsn'],
|
21 |
+
min=2,
|
22 |
+
max=5,
|
23 |
+
increment=1,
|
24 |
+
getmode=oracledb.SPOOL_ATTRVAL_WAIT
|
25 |
+
)
|
26 |
self.tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
|
27 |
self.traffic_manager = TrafficSpotManager(self.connection_params)
|
28 |
|
|
|
38 |
self.cached_listings = {}
|
39 |
|
40 |
def get_all_neighborhoods(self):
|
41 |
+
connection = self.pool.acquire()
|
42 |
try:
|
43 |
+
cursor = connection.cursor()
|
44 |
+
cursor.prefetchrows = 50
|
45 |
+
cursor.arraysize = 50
|
46 |
cursor.execute("""
|
47 |
SELECT DISTINCT NEIGHBOURHOOD
|
48 |
FROM airbnb_master_data
|
|
|
54 |
except Exception as e:
|
55 |
print(f"Database error getting neighborhoods: {str(e)}")
|
56 |
return []
|
57 |
+
finally:
|
58 |
+
self.pool.release(connection)
|
59 |
|
60 |
def get_neighborhood_listings(self, neighborhood):
|
61 |
+
connection = self.pool.acquire()
|
62 |
if neighborhood in self.cached_listings:
|
63 |
return self.cached_listings[neighborhood]
|
|
|
64 |
try:
|
65 |
+
cursor = connection.cursor()
|
66 |
+
cursor.prefetchrows = 50
|
67 |
+
cursor.arraysize = 50
|
68 |
cursor.execute("""
|
69 |
SELECT m.ID, m.NAME, m.HOST_NAME, m.NEIGHBOURHOOD,
|
70 |
m.LATITUDE, m.LONGITUDE, m.ROOM_TYPE, m.PRICE,
|
|
|
72 |
m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
73 |
FROM airbnb_master_data m
|
74 |
LEFT JOIN airbnb_reviews_data r ON m.ID = r.LISTING_ID
|
75 |
+
WHERE m.LATITUDE IS NOT NULL AND m.LONGITUDE IS NOT NULL AND NEIGHBOURHOOD = :neighborhood AND ROWNUM <= 150
|
76 |
GROUP BY m.ID, m.NAME, m.HOST_NAME, m.NEIGHBOURHOOD,
|
77 |
m.LATITUDE, m.LONGITUDE, m.ROOM_TYPE, m.PRICE,
|
78 |
m.REVIEWS_PER_MONTH, m.MINIMUM_NIGHTS, m.AVAILABILITY_365
|
|
|
85 |
except Exception as e:
|
86 |
print(f"Database error: {str(e)}")
|
87 |
return []
|
88 |
+
finally:
|
89 |
+
self.pool.release(connection)
|
90 |
|
91 |
def get_listing_reviews(self, listing_id):
|
92 |
try:
|
|
|
100 |
ELSE COMMENTS
|
101 |
END as COMMENTS
|
102 |
FROM AIRBNB_REVIEWS_DATA
|
103 |
+
WHERE LISTING_ID = :listing_id AND ROWNUM <= 50
|
104 |
ORDER BY REVIEW_DATE DESC
|
105 |
""", listing_id=str(listing_id))
|
106 |
reviews = cursor.fetchall()
|