static byte[] getAttrNameHbase(string attrName) { if (cache_attrName.ContainsKey(attrName)) { return(cache_attrName[attrName]); } var val = Dal.GetBytes(attrName); cache_attrName.AddOrUpdate(attrName, val, (k, e) => e = val); return(cache_attrName[attrName]); }
static byte[] getBaseTableHbase(string baseName, string columnFamily) { var key = baseName + columnFamily; if (cache_baseName.ContainsKey(key)) { return(cache_baseName[key]); } var val = Dal.GetBytes(Dal.усскийВТранслит(key)); cache_baseName.AddOrUpdate(key, val, (k, e) => e = val); return(cache_baseName[key]); }
public static Dictionary <string, Guid> ResolveGuidCode(string baseName, List <string> ids) { if (ids == null || ids.Count == 0) { return(null); } if (string.IsNullOrWhiteSpace(baseName)) { return(null); } var source = new ConcurrentDictionary <string, Guid>(); System.Threading.Tasks.Parallel.ForEach( ids, (id) => { source.AddOrUpdate(id, Guid.Empty, (k, e) => e = Guid.Empty); }); var socket = null as TSocket; var transport = null as TBufferedTransport; var data = new List <TRowResult>(); // запросим данные GuidCode в Hbase try { // Сделаем вычисление апи хоста по базе данных socket = new TSocket(getHost(baseName, "Href"), Port); transport = new TBufferedTransport(socket); var proto = new TBinaryProtocol(transport); var hbase = new Hbase.Client(proto); transport.Open(); data = hbase.getRowsWithColumns( getBaseTableHbase(baseName, "Href"), ids.Select(id => Dal.GetBytes(id)).ToList(), new List <byte[]>() { getAttrNameHbase("Href:GuidCode") }, null); } finally { if (transport != null) { transport.Close(); transport = null; } } // обработка данных System.Threading.Tasks.Parallel.ForEach( data, (item) => { var key = Convert.ToString(Dal.GetObject(typeof(string), item.Row)); if (source.ContainsKey(key)) { source[key] = new Guid(item.Columns.First().Value.Value); } }); return(source.ToDictionary(k => k.Key, e => e.Value)); }
static void _Sets(string baseName, List <Row> rows, DateTime transaction_date) { if (string.IsNullOrWhiteSpace(baseName)) { return; } if (rows == null || rows.Count == 0) { return; } if (rows.Count == 1 && rows.First().Значения.Count == 0 && rows.First().ИдентификаторыОбъекта.Count == 0) { return; } // данные для отправки в Hbase var dataNode = new List <global::BatchMutation>(); var dataHref = new List <global::BatchMutation>(); System.Threading.Tasks.Parallel.ForEach(rows, (r) => { // массив значений if (r.Значения.Count > 0) { dataNode.Add( new global::BatchMutation() { Row = r.GuidCode.ToByteArray(), Mutations = r.Значения.Select( p => new global::Mutation() { IsDelete = false, Column = getAttrNameHbase("Node:" + p.Key), Value = Dal.GetBytes(p.Value) }).ToList() }); } // массив идентификаторов if (r.ИдентификаторыОбъекта.Count > 0) { dataHref.AddRange( r.ИдентификаторыОбъекта.Select( k => new global::BatchMutation() { Row = Dal.GetBytes(k), Mutations = r.Значения.Select( p => new global::Mutation() { IsDelete = false, Column = getAttrNameHbase("Href:GuidCode"), Value = r.GuidCode.ToByteArray() }).ToList() }).ToList()); } }); // отправим данные паралельно System.Threading.Tasks.Parallel.Invoke( () => { _Sets_hbase(baseName, "Node", transaction_date, dataNode); }, () => { _Sets_hbase(baseName, "Href", transaction_date, dataHref); }); }