[more of same
thomashartman1@gmail.com**20081014181551] hunk ./src/AppStateSetBased.hs 188
+-- bad performance for large unumbers of users (>1000, with 200 jobs/dummy user)
+-- maybe macid doesn't like serializing large quantities of data at once
+addDummyData dd = do
+ AppState ss (Users us) <- get
+ put $ AppState ss (Users (M.union us dd) )
+
+addDummyUser (un,uis) = do
+ AppState ss (Users us) <- get
+ us' <- M.insertUqM un uis us
+ put $ AppState ss (Users us' )
+
hunk ./src/AppStateSetBased.hs 218
+ , 'addDummyData
+ , 'addDummyUser
hunk ./src/Controller.hs 86
- -- faster, insert all users at once
+ -- faster, insert all users and all jobs in one transaction
+ -- fast for small numbers of users, but slow for >1000
hunk ./src/Controller.hs 89
+ , dir "atomicinsertsalljobs" [ spStressTest ("atomic inserts, all jobs at once",insertusAllJobs) rglobs]
hunk ./src/ControllerStressTests.hs 40
-atomic_inserts = mapM_ insertu . M.toList . users
hunk ./src/ControllerStressTests.hs 41
+
hunk ./src/ControllerStressTests.hs 50
- liftIO $ putStrLn $ fname ++ " stresstest, elapsedtime: " ++ stressTestTime
+ liftIO $ putStrLn $ fname ++ " stresstest, " ++ (show n) ++ " users, elapsedtime: " ++ stressTestTime
hunk ./src/ControllerStressTests.hs 90
--- insert a whole mess of users -- less realistic, but faster way
+
+-- insert a whole mess of users -- less realistic, but maybe faster way
hunk ./src/ControllerStressTests.hs 93
+
hunk ./src/ControllerStressTests.hs 95
-insertus = update . ( InitializeDummyData . users )
-
+insertus us = update . ( AddDummyData . users ) $ us
+
+--insertuAllJobs :: (MonadIO m) => (UserName, UserInfos) -> Users -> m ()
+insertusAllJobs = mapM_ insertuAllJobs . M.toList . users
+insertuAllJobs (u, uis) = do
+ update $ ( (AddDummyUser (u,uis)) )
+ liftIO $ putStrLn $ "insertuAllJobs, added user: " ++ (unusername u)
hunk ./src/ControllerStressTests.hs 104
+atomic_inserts = mapM_ insertu . M.toList . users
hunk ./src/ControllerStressTests.hs 110
- liftIO $ putStrLn $ "added user" ++ (unusername u)
+ liftIO $ putStrLn $ "insertu, added user: " ++ (unusername u)
hunk ./src/MiscMap.hs 18
+ , Data.Map.union
hunk ./templates/macidstresstest.st 49
- transactions. But, it's a good way to load a lot of data and see how this app performs -- say, with 100,000 users. (?)
-l
+ transactions. And it's only faster for small numbers of users:
+
+
Hm... better than O(n) performance for small numbers of users, worse for larger.
+
one big insert stresstest, 20 users, elapsedtime: 5 secs
+
one big insert stresstest, 200 users, elapsedtime: 12 secs
+
one big insert stresstest, 1000 users, elapsedtime: 446 secs
+
with 200 users it was ok (12 seconds), but with 1000 users seems to be churning ram and still going after 2 minutes
+
Perhaps if you're inserting large amounts of data, better to break things up, eg 1 insert per user,
+
and insert includes inserting dummy jobs
+
+
Then there's stresstest/atomicinsertsalljobs/20. + Here, there is one insert per user, but all jobs get inserted at once. Can I insert 100000 users this way? + + hunk ./todo 3 + How much does more ram cost? + Linode has ~3GB ram servers available for $150/month. What about dreamhost? + scam offers of 8GB ram vps for $200/month but they're... well... scams + hunk ./todo 26 + notes... after 1000 user insert (one big, but don't think it matters) + thartman@thartman-laptop:~/happs-tutorial>ls -lth _local/happs-tutorial_state/ | head + -rw-r--r-- 1 thartman thartman 22M Oct 14 14:21 events-0000000101 + top: + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND + 23961 thartman 20 0 443m 185m 2132 S 0.0 38.1 1:24.28 257m happs-tutorial + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + 23961 thartman 20 0 443m 185m 2132 S 0.0 38.1 1:24.28 happs-tutorial +