throttleDB.lua
Verified
Added by iNTERFACEWARE
Throttle database access by reducing the number of inserts during peak hours
Source Code
local throttleDB = {}
local function IsWeekday(Day)
-- Sunday == 1, Saturday == 7
return Day ~= 1 or Day ~= 7
end
local function IsPeakTime(Hours, Minutes)
-- assuming peak time is 10:30 am (10:30) to 3:30 pm (15:30)
return (Hours > 10 and Hours < 15) or
(Hours == 10 and Minutes >= 30) or
(Hours == 15 and Minutes <= 30)
end
-- The definition of "peak period" will be dependent on the situation.
-- Thus this code will be unique for each user.
local function IsPeakPeriod()
local Date = os.date("*t")
local IsWeekdayValue = IsWeekday(Date.wday) -- wday range is (1-7)
local IsPeakTimeValue = IsPeakTime(Date.hour, Date.min) -- hour range is (0-23)
-- min range is (0-59)
if IsWeekdayValue and IsPeakTimeValue
then
return true
else
return false
end
end
function throttleDB.DoDataMerge(Out, DbType, DbName, User, Pwd)
-- Using sleep to throttle database updates during peak periods.
if IsPeakPeriod() then
util.sleep(100)
end
if Out then
local conn = db.connect{
api=DbType,
name=DbName,
user=User,
password=Pwd,
live=true}
conn:merge{data=Out, live=true}
end
end
return throttleDB
Description
Throttle database access by reducing the number of inserts during peak hours
Attachments
Usage Details
The process for the throttleDB module is quite simple: It finds the current time, and checks to see if it falls within the specified peak time. If it does, then database access is throttled, by waiting for 100 milliseconds between inserts.
How to use throttleDB.lua:
- Add it to your shared modules in any Translator project
- Add
local throttled = require 'throttleDB'at the top of your script - Use
throttled.DoDataMerge()to merge data to the database
Here is some example code for main():
local throttled = require 'throttleDB'
function main(Data)
local T = MapData(Data)
if T then
throttled.DoDataMerge(T, db.SQL_SERVER, 'Test', '', '')
end
end
function MapData(Data)
local Msg, Name = hl7.parse{vmd='demo.vmd', data=Data}
local Out = db.tables{vmd='demo.vmd', name=Name}
-- Map data from Msg to Out here
return Out
end