go to post Alexey Maslov · Feb 6, 2019 This is well-known classic approach how asynchronous behavior can be simulated in "synchronous only" language. It potentially suffers of two problems caused by the need to check if something has dropped to TCP connection:1) Read x:timeOut (where timeOut>0) causes delays up to timeOut seconds which are more or less acceptable for background job but not acceptable for foreground (e.g., some UI handling).2) Read x:0 is too unreliable.Agree with Dmitry: it helps that "not all those tasks have to be asynchronous".
go to post Alexey Maslov · Feb 6, 2019 In addition to replies of Evgeny and Robert: source code globals (^oddDEF, ^rMAC, ^ROUTINE, ^rOBJ, etc) are usually negligibly small if compared to data globals;not keeping .INT does not harden privacy, as all the sources are still available as .CLS, .INC, .MAC.
go to post Alexey Maslov · Feb 5, 2019 Web Socket is an asynchronous protocol by its nature. How would you implement asynchronous client in ObjectScript?
go to post Alexey Maslov · Jan 9, 2019 Andrey, Evgeny:while it was 3d party research, there are some signs of Caché performance tuning: global cache and routine cache were manually enlarged, journaling was switched off at the process level. Were the similar tuning steps performed for other DBMSs used in the research? AFAIK, Oracle would not allow to stop transaction logging (=journaling) at all. Only few people have appropriate knowledge of all DBMS products listed in the article (maybe Andrey is one of them), and nobody would touch hidden or semi-hidden performance parameters without it.That's why I doubt if an Oracle engineer (or even DBA) would approve such "derby" results. Shouldn't we agree with an author of the sentence? :...a single view of Oracle has lead to vastly different results, like the difference between a circle and a square. Always remember that there is no substitute for a real-world test that simulates the actual behavior of your production systems, using your own production SQL (http://www.dba-oracle.com/t_benchmark_testing.htm)
go to post Alexey Maslov · Dec 28, 2018 But we don't see this stuff at community site. It's always funny (at least for me) when some stuff is discussed as commonly known while it really is not.Happy New Year to everyone!
go to post Alexey Maslov · Dec 28, 2018 Hi Evgeny!Good joke - haha. All of them are clicable as all of them are drawn on the same jpeg file, aren't they?
go to post Alexey Maslov · Dec 28, 2018 As you know for sure, pattern can be assign to variable: set list=$lb("abc", "c", "aaa", "bbb") set result = $$patmatch(list, "1(1(1.""a"".E),1(.E1.""b""))") ;set result = ..match(list, "a*,*b") zw result // result=$lb("abc","aaa","bbb") q patmatch(pList, pPat) new result,i set result="" for i=1:1:$ll(pList) if $lg(pList,i)?@pPat set result=result_$lb($lg(pList,i)) quit result
go to post Alexey Maslov · Dec 27, 2018 My congrats to winners and Season Greetings to everybody!I'm just curious: why some surnames are emphasized with green in the leader board?
go to post Alexey Maslov · Dec 5, 2018 A customer of ours is running a production system of two mirrored DB servers and 13 APP ones, running 24x7 with possible downtime <= 2 hours once a month.Summary production DB size is ~ 4TB. Full backup takes ~ 10 hours, its restore ~ 16 hours. Therefore incremental backups are scheduled nightly, and full backup - weekly; to avoid performance drawback, Mirror Backup server is assigned to run all this activity.As to integrity check, it turned to be useless since the DB size had overgrown 2TB: weekend had become not enough to run it through, so it was disabled. It doesn't seem to be a great problem because:Enterprise grade SANs are very reliable, the probability of errors is very low.Let's imagine that integrity error occurred. Which database blocks would be most probably involved? Those that are active changed by users' processes, rather than those that reside in "stale" part of the database. So, the errors would most likely appear on application level sooner than they might be caught with Integrity Check. What, do you think, would the administrator do in case of such kind of errors? Stop production for several days, running Integrity Check and fixing the errors? No, they would just switch from damaged Primary to (healthy) Backup Server. And what if Backup Server is damaged as well? As they reside on separated disk groups, this scenario means real disaster with the best solution: to switch to Async Backup which resides at another data center.
go to post Alexey Maslov · Dec 4, 2018 Hi Vitaliy,Thank you for sharing this option; didn't notice the moment when this class emerged. Just found that it exists in Caché 2015.1-2018.1. Not sure how would it work with ODBC/JDBC, but it's up to OP to check this stuff if he needs it.
go to post Alexey Maslov · Nov 28, 2018 Thanks, Pavel. I didn't face the "renaming problem" as I was recoding and transfering global nodes to new (empty, freshly created) database.
go to post Alexey Maslov · Nov 28, 2018 At the moment it's able to recode locally or remote mounted 8-bit database to Unicode one. All activity occurs at the Unicode system.This approach was feasible because the only global collation we used in 8-bit database was Cache Standard. Use we something else (e.g. Cyrillic2), more complex solution would be needed, something like Pavel and Ivan briefly described.
go to post Alexey Maslov · Nov 28, 2018 I transfer large globals in several concurrent jobs; avg speed is ~ 8MB/s. As to journals, their transfer is times slower, while I try to compensate it using "economical" approach (with filtration) mentioned above.My toolkit is under construction yet. At the moment it's able to recode locally or remote mounted 8-bit database to Unicode one. All activity occurs at the Unicode system.
go to post Alexey Maslov · Nov 28, 2018 Ivan, I'm just curious: how long it took to transfer 2TB?IMHO, the main problem in such endeavors is not how to recode the database as it's always possible somehow, but how to avoid long interruption of 24x7 workflow. In my case I'm developing a tool which scans journal files and remotely applies the changes to those globals that are already was (or being) transferred to Unicode database. Async Mirroring with dejournal filtration could be used instead, although I don't want to use it for several reasons.
go to post Alexey Maslov · Nov 28, 2018 Hi everybody,I worked on similar task for Cyrillic (CP-1251 encoded) database last fall. My approach was very close to yours, while I did not see any reason to separate Group 1 from Group 2, so all data was converted on fly, without global export/import.
go to post Alexey Maslov · Nov 20, 2018 If so, I'd just put an icon which points to 'ccontrol stop ...' command file on the Work Table accessible to all users, or (to keep it secured better) on individual Work Tables of those ones who permitted to initiate the shutdown.
go to post Alexey Maslov · Nov 20, 2018 Dmitry and Ed,I'm just curious: why do you recommend the OP to use an entry point which is provided mostly for recovering from errors? In most cases we do *want* the user code to be executed, don't we? job INT^SHUTDOWN ; is the right code (corrected by Dmitry)
go to post Alexey Maslov · Nov 20, 2018 Hi Alexi, It sounds like you are wanted to:run the task in Caché Task Manager which does external call to some *.bat/.cmd file (so, calling out Caché)this .bat file should run some code inside Caché (so, calling in Caché back again)This scenario is possible (despite some security caveats), but (pardon me) - just rises unneeded difficulties. If your task can be solved easier than it initially seemed to be, why not take the easier (and more secure) way?
go to post Alexey Maslov · Nov 20, 2018 Remove ZNamespace "%SYS"from the ExecuteCode line. You may want to do it for either of two reasons:if you scheduled a new task using Task manager's defaults for startup namespace as "%SYS", it is not neededthis construction in syntactically wrong; zn "%SYS" or new $namespace set $namespace="%SYS" should be used instead.
go to post Alexey Maslov · Nov 20, 2018 best stay away from doing anything too clever as it can lead to unreadable codeNo, as staying away you are getting untrained, so you can loose an ability to read unreadable code written by others very soon