GDataDB: одновременные соединения и Google Docs - PullRequest
0 голосов
/ 04 марта 2012

Я использую GDataDB в качестве онлайн INI-файла для сохранения настроек пользователя в «облаках». Я использую одну электронную таблицу, как показано ниже:

 username   create     update       expire          amount
 3600001    20120303   20120303     20180303        9
 3600001    20120303   20120303     20160303        9
 3600020    20120301   20120303     20190505        14

Интересно, что происходит при одновременной записи / обновлении. Я имею в виду это безопасно? Что ты думаешь?

Вот коды: как вы видите, у вас мало шансов получить доступ к файлу в одно и то же время, но я прошу для справки в будущем, чтобы увидеть, можно ли его использовать или нет при тяжелых операциях - не слишком много - чтение - запись. Или я могу реализовать механизм блокировки?

        public class License
        {
            public string username { get; set; }
            public string create { get; set; }
            public string update { get; set; }
            public string expire { get; set; }
            public double amount { get; set; }
        }



        private static void Main(string[] args) {


            string myaccount = "xxxxxxxxxx@gmail.com";
            string mypass = "xxxxxxxxxxxxxxxx";
            string spreadsheet = "licence";

            string username = "03600001";
            double amount = 9.0d; //bucks
            int extend = 1; //year

            // create the DatabaseClient passing my Gmail or Google Apps credentials
            IDatabaseClient client = new DatabaseClient(myaccount, mypass);

            // get or create the database. This is the spreadsheet file 
            IDatabase db = client.GetDatabase(spreadsheet) ?? client.CreateDatabase(spreadsheet);

            // get or create the table. This is a worksheet in the file 
            // note I am using my Person object so it knows what my schema needs to be  
            // for my data. It will create a header row with the property names 
            ITable<License> table = db.GetTable<License>(spreadsheet) ?? db.CreateTable<License>(spreadsheet);




            var license = new License();


            IList<IRow<License>> rows = table.FindStructured(String.Format("username={0}", username)).OrderByDescending(o => o.Element.expire).Take(1).ToList();

            if (rows == null || rows.Count == 0)
            {
                //add new
                license.username = username;
                license.create = DateTime.Now.ToString("yyyyMMdd");
                license.update = license.create;
                license.expire = DateTime.Now.AddYears(extend).ToString("yyyyMMdd");
                license.amount = amount;

                table.Add(license);
            }
            else
            {
                //update
                IRow<License> row = rows[0];

                DateTime expire = DateTime.ParseExact(row.Element.expire, "yyyyMMdd", null);

                row.Element.expire = expire.AddYears(extend).ToString("yyyyMMdd");
                row.Element.update = DateTime.Now.ToString("yyyyMMdd");
                row.Element.amount = amount;

                row.Update();
            }

          }

1 Ответ

1 голос
/ 04 марта 2012

Насколько я знаю, проблем быть не должно.Конечно, поскольку нет встроенных механизмов блокировки, последнее обновление конкретной ячейки будет успешным, если вы сами не внедрили механизм блокировки.

...